记录一个内存泄漏的小Tip
前言:
LiveData相比较于一般的观察者组件,其好处是在observe后无需手动解除订阅,它会根据订阅者的生命周期自动解除订阅。
如果在Fragment的ViewModel中的LiveData.observe时传了Activity作为LifecycleOwner,这样便会导致Fragment销毁后,Activity仍持有此Fragment关联的ViewModel中的LiveData引用
原因:
Fragment中注册LiveData观察,传入的传参LifecycleOwner为Activity,此Activity为常驻,导致LiveData不能解注册,持有了View的引用,进而引发内存泄漏。
解决方案:
修改注册LiveData监听的LifecycleOwner为getViewLifecycleOwner(),使LiveData可正常解注册。