天天看點

記憶體洩漏之EventBus

項目中使用了EventBus之後,不停地出現報告關于EventBus記憶體洩漏的Leaks

反複檢查了代碼,發現EventBus的注冊已經解綁都是正确的,一開始也覺得這個記憶體洩漏地莫名其妙。

洩漏大概說的是,EventBus持有了某個Activity或者Fragment的對象,這個對象洩漏了。

後面我梳理了一下場景:

導航頁過去之後,進入多個Fragment切換的主界面(EventBus有注冊在這裡),由于使用者未登入,隻要有操作,就會跳轉到登入界面,從登入界面登入成功傳回之後,都會出現記憶體洩漏的問題。

經過排查,發現是由于主界面HomeActivity的啟動模式引起的。HomeActivity的啟動模式是Standrad,每次都會建立一個執行個體,應該是由于每次都建立一個HomeActivity執行個體,而沒有将上一個HomeActivity的執行個體給消除掉。

解決方案:

HomeActivity采用SingleInstance模式,確定隻有一個執行個體,不會被重複建立。當然采用SingleInstance引發的代碼層面的問題這裡就不展示了,根據具體要求修改就好了。

繼續閱讀