[Android] MVP Memory leak

  • 402
  • 0

MVP Memory leak

重拾Andorid 開發工作, 剛接觸MVP, 寫的心慌慌, 功能急著上線, 一邊寫功能一邊很怕遇到以下

Problems?

1. Memory leak

2. Null point exception

 

Why ?

Presenter 負責處理邏輯, 特別是浩時的網路請求... 

萬一在還在數據請求還沒回來, activity or fragment 被銷毀了..

而Presenter ㄧ直持有Activity or fragment的物件......這時候會

因持有強強der引用, 導致Activity / fragment 無法被釋放GC掉 = > Memorry leak

 

How? 

1. BasePresenter : WeakReference view  用以減少memory leak 的可能性

2. onDestroy 時, call BasePresenter detachView to release view reference

 

But!!

以上兩種不能保證... 何時會被系統回收資源...也不一定保證Actity 就會跑到onDestroy()

可能在系統急切需要Memory時,  回收invisible views, 就不一定保證會跑到 onDestroy()

這時候, 耗時數據回來了....然後 presenter 操作view, view被回收了... = > NullPointException

保險起見.....

So~

建議是在 對view操作前, 先判斷 view 為空 do nothing...

 

以上總結查找了一些資料Reference:

https://juejin.im/entry/58b39f01b123db0052d1764c

https://blog.csdn.net/qq137722697/article/details/78275882