使用 LeakCanary 檢測項目中的內(nèi)存泄漏以及常用的解決方案。

LeakCanary Github :https://github.com/square/leakcanary

使用: 使用的時候按照官方的配置來就行。然后需要我遇到的坑主要是在 application 初始化的時候會報類轉(zhuǎn)換異常。后來查找資料是因為 Application 的 oncreate 會調(diào)用多次,如果你在 onCreate 中有啟動服務(wù)的操作,要先判斷啟動的進(jìn)程不是不是你的 app,方法百度的話會有很多。

常見的內(nèi)存泄漏案列

  • 單例中持有 Acitivity 或者 Activity 的成員變量

單例中如果持有 Activity 或者 Activity 的成員變量,那么在 Activity 生命周期結(jié)束之后,是無法回收的,因為你還持有它的引用,我使用的解決方法是:在 Activity 中的生命周期結(jié)束的時候,單例中提供一個釋放引用的方法,在 onDestory 中調(diào)用,防止繼續(xù)持有該 Activity 的引用。

  • Handler 的發(fā)送消息未完成,Activity 生命周期結(jié)束。

Handler 和 Meassge 的使用頻率非常高,Android 有一個 Looper 一直會輪詢 MessageQueue 中的消息然后處理,假設(shè)你在 Activity 銷毀前使用 handler 發(fā)送了消息,但是 Looper 沒有處理完成,此時 Acitivity 同樣是被占用著,無法回收的,所以在 onDestroy 里面要記得清空 Handler 的任務(wù)和消息棧。

目前值遇到了上述兩種內(nèi)存泄漏的例子,后續(xù)發(fā)現(xiàn)后會補充到這里。LeakCanary 確實很好用。 :)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容