內存泄漏的問題,是一個老生常談的問題,這里不多說,雖然網上解決的思路一大把,但是我把我自己的解決過程記錄一下,解決方法當然可以百度就出來了,這里不過多記錄。
1.使用Leakcanary,簡單使用配置如下:
dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'} 使用當然也非常簡單,在application的oncreate方法中加入如下代碼就好了:LeakCanary.install(this); 這樣就可以在運行app的時候檢查是否有內存泄漏了。但是有些時候會發現,報的內存泄漏發生的位置很尷尬,為系統控件等等,一眼看到后覺得不是我們的代碼的問題,這個時候就需要用AS的自帶工具進行內存泄漏檢查了。2.使用AS的內存分析工具進行內存泄漏檢查,使用過程如下
1)運行app,然后選擇查看運行內存,如下圖
1)
2)點擊紅線所指向的按鈕,然后會出現如下圖所示效果:
3)稍等一分鐘左右就會在AS中出現如下內容:
4)上面就是此時app占用內存的情況分析了,當然初看比較亂,我們要進行篩選,如下圖:
首先紅色箭頭選中view樹結構,然后黃色箭頭選擇你自己的包名內的文件,這時候就會看到圓圈圈中的內容了,發現了沒有不是1或者0,說明這里有內存泄漏,需要修改。好了,然后我選擇SquareView這個進行分析,為什么是這個而不是activity或者fragment呢?因為activity和fragment中存在泄漏是由于里面的view引起的,點擊后看右側圖,再點擊后看下面的圖,藍綠色的箭頭指示位置就是具體是什么造成的內存不能夠釋放。到此就可以根據具體位置進行具體解決了。
新聞熱點
疑難解答