可以在服务中使用 LiveData 对象吗?

Posted

技术标签:

【中文标题】可以在服务中使用 LiveData 对象吗?【英文标题】:Is it okay to use LiveData objects inside a service? 【发布时间】:2021-06-18 16:15:36 【问题描述】:

我在服务中使用 Companion 对象将我的 LiveData 公开给片段。这可以使用还是会导致我出现内存泄漏等问题?

为我服务:

  companion object 
    val timeLeftInSeconds = MutableLiveData<Long>(0)

在我的片段中:

 LockoutService.timeLeftInSeconds.observe(viewLifecycleOwner, Observer ...)

【问题讨论】:

【参考方案1】:

不,这很好,因为伴随对象有点像静态字段,但我强烈建议改用存储库,因为它会增加代码的可读性并使其更加健壮。类似的东西

object AppRepository
    val timeLeftInSeconds = MutableLiveData<Long>(0)

在片段中

AppRepository.timeLeftInSeconds.observe(viewLifecycleOwner

【讨论】:

谢谢。我是新手,我并不完全了解静态字段,这就是我担心的原因,因为谷歌推荐绑定服务或 localbroadcastmanager 用于片段和服务之间的通信。【参考方案2】:

不,这完全没问题,因为伴生对象就像 java 中的静态属性,并且不绑定到您定义它们的类。 你也可以把它放在同一个文件中,在你的服务之外

LockoutService.kt

val timeLeftInSeconds = MutableLiveData<Long>(0)
class LockoutService ...

并在不提及服务名称的情况下访问它

【讨论】:

以上是关于可以在服务中使用 LiveData 对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android LiveData和Room:getValue返回NULL

FirebaseAuth.AuthStateListener 使用 LiveData。下面的实现有改进的余地吗?

一年时间过去了,LiveData真的被Flow代替了吗? LiveData会被废弃吗?

在视图模型中使用 LiveData 的结果从 firebase 获取数据

在没有实时数据的情况下使用 ViewModel 可以吗

一年时间过去了,LiveData真的被Flow代替了吗? LiveData会被废弃吗?