可以在服务中使用 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会被废弃吗?