我找不到任何信息,如果在没有生命周期所有者的情况下使用LiveData是个坏主意。如果是的话,还有什么可以替代?
让我举一个简单的例子
class Item() {
private lateinit var property: MutableLiveData<Boolean>
init {
property.value = false
}
fun getProperty(): LiveData<Boolean> = property
fun toggleProperty() {
property.value = when (property.value) {
false -> true
else -> false
}
}
}
class ItemHolder {
private val item = Item()
private lateinit var observer: Observer<Boolean>
fun init() {
observer = Observer<Boolean> { item ->
updateView(item)
}
item.getProperty().observeForever(observer)
}
fun destroy() {
item.getProperty().removeObserver(observer)
}
fun clickOnButton() {
item.toggleProperty();
}
private fun updateView(item: Boolean?) {
// do something
}
}
答案 0 :(得分:1)
对我来说LiveData
有两个好处:
Activity
/ Fragment
)内提供更新。正如已经说过的那样,如果您在生命周期组件(Activity
/ Fragment
)中使用它,并且可以随时管理所提供的更新,那么您可以生命周期持有者,否则,迟早会导致崩溃或数据丢失。
作为LiveData
行为的替代方案,我可以建议来自BehaviourSubject
框架的RxJava2
,其行为几乎相同,保留最后更新的值,并使用新的订阅者进行更新
答案 1 :(得分:0)
您可以使用observeForever(Observer)
方法在没有关联的LifecycleOwner对象的情况下注册观察者。在这种情况下,观察者被视为始终处于活动状态,因此始终会收到有关修改的通知。您可以删除调用removeObserver(Observer)
方法的这些观察者。
参考 https://developer.android.com/topic/libraries/architecture/livedata.html#work_livedata