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 確實很好用。 :)