Tim*_*ima 5 android kotlin android-livedata android-architecture-components
如果没有生命周期所有者使用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
}
}
Run Code Online (Sandbox Code Playgroud)
你可以注册一个没有关联 LifecycleOwner 对象的观察者,使用
observeForever(Observer) method
Run Code Online (Sandbox Code Playgroud)
像那样:
orderRepo.getServices().observeForever(new Observer<List<Order>>() {
@Override
public void onChanged(List<Order> orders) {
//
}
});
Run Code Online (Sandbox Code Playgroud)
您可以使用该方法注册一个没有关联 LifecycleOwner 对象的观察者observeForever(Observer)
。在这种情况下,观察者被认为始终处于活动状态,因此始终会收到有关修改的通知。您可以调用该方法删除这些观察者removeObserver(Observer)
。
参考 https://developer.android.com/topic/libraries/architecture/livedata.html#work_livedata
对我来说LiveData
有两个好处:
Activity
/ Fragment
) 的适当状态下传递更新。正如已经说过的,如果您在生命周期组件(Activity
/ Fragment
)之外使用它,并且可以随时管理交付的更新,那么您可以在没有生命周期持有者的情况下使用它,否则迟早会导致崩溃或数据丢失。
作为该行为的替代方案LiveData
,我可以建议使用BehaviourSubject
fromRxJava2
框架,其行为几乎相同,保存最后更新的值,并用它更新新的订阅者。
归档时间: |
|
查看次数: |
2385 次 |
最近记录: |