我的liveData有一个问题,它没有用信息更新片段,我觉得它在某个特定的时刻退订了viewLifecycleOwner,有没有办法跟踪liveData的订阅,看看它是否退订了?谢谢!
碎片
val loginResult: MutableLiveData<RequestResult<LoginResponse>> by lazy {
MutableLiveData()
}
vm.loginRequestResult.observe(viewLifecycleOwner) {
when (it) {
is RequestResult.Success -> vm.navigateToSetLocation()
is RequestResult.Error -> showErrorIncorrectEmailOrPassword()
}
}
视图模型:
when(response){
is RequestResult.Success -> loginRequestResult.value = response
is RequestResult.Error -> loginRequestResult.postValue(response)
}
2条答案
按热度按时间csbfibhn1#
您在Fragment中定义了LiveData示例。Fragment示例可以在许多事件下被操作系统拆除并重新创建。如果发生这种情况,您的LiveData示例将是一个新示例,没有旧示例的内存。您可能会进入其他屏幕进行登录事件,当它返回到Fragment时,它将是一个新的Fragment示例。
这就是创建ViewModel的原因。它的寿命比重新创建Fragment的寿命长。你必须在ViewModel而不是Fragment内定义LiveData。如果你不将值备份到磁盘,则至少应备份值using SavedInstanceState,以应对因内存不足而暂停应用后Fragment恢复的情况。
von4xj4u2#
您应该将LiveData移动到ViewModel中