记录一个内存泄漏的小Tip

250 阅读1分钟

记录一个内存泄漏的小Tip

前言:

LiveData相比较于一般的观察者组件,其好处是在observe后无需手动解除订阅,它会根据订阅者的生命周期自动解除订阅。

如果在FragmentViewModel中的LiveData.observe时传了Activity作为LifecycleOwner,这样便会导致Fragment销毁后,Activity仍持有此Fragment关联的ViewModel中的LiveData引用

原因:

Fragment中注册LiveData观察,传入的传参LifecycleOwnerActivity,此Activity为常驻,导致LiveData不能解注册,持有了View的引用,进而引发内存泄漏。

解决方案:

修改注册LiveData监听的LifecycleOwnergetViewLifecycleOwner(),使LiveData可正常解注册。