問題描述
當你在一些主頁Activity里注冊LiveData的觀察者時,有可能是在onStart或者onResume生命周期里注冊它。這個時候就有可能導致內存泄露。
問題原因
其實在正常情況下onStart或者onResume生命周期里注冊觀察者Observer也沒問題。但是如果你的主頁如果是不需要退出,就不會走onDestroy生命周期(特別是在一些Android物聯設備上,本身主頁就是桌面,且無法退出)。這個時候就會出現在其他Activity返回后在onStart或者onResume生命周期里反復注冊觀察者Observer。
現在抓取內存泄露時候可以看到多個內部類(就是Observer類)不會被移除。這是因為LiveData的觀察者在Activity或者Fragment里不需要手動去注銷,但是也是需要在onDestroy執行時候才會注銷的。
解決辦法
請將它放到onCreate生命周期里注冊Observer,防止反復注冊。