kotlin 如何跟踪liveData订阅?

tag5nh1u  于 2022-12-19  发布在  Kotlin
关注(0)|答案(2)|浏览(187)

我的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)
        }
csbfibhn

csbfibhn1#

您在Fragment中定义了LiveData示例。Fragment示例可以在许多事件下被操作系统拆除并重新创建。如果发生这种情况,您的LiveData示例将是一个新示例,没有旧示例的内存。您可能会进入其他屏幕进行登录事件,当它返回到Fragment时,它将是一个新的Fragment示例。
这就是创建ViewModel的原因。它的寿命比重新创建Fragment的寿命长。你必须在ViewModel而不是Fragment内定义LiveData。如果你不将值备份到磁盘,则至少应备份值using SavedInstanceState,以应对因内存不足而暂停应用后Fragment恢复的情况。

von4xj4u

von4xj4u2#

您应该将LiveData移动到ViewModel中

相关问题