內(nèi)存泄漏的問題,是一個(gè)老生常談的問題,這里不多說,雖然網(wǎng)上解決的思路一大把,但是我把我自己的解決過程記錄一下,解決方法當(dāng)然可以百度就出來了,這里不過多記錄。
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'} 使用當(dāng)然也非常簡單,在application的oncreate方法中加入如下代碼就好了:LeakCanary.install(this); 這樣就可以在運(yùn)行app的時(shí)候檢查是否有內(nèi)存泄漏了。但是有些時(shí)候會(huì)發(fā)現(xiàn),報(bào)的內(nèi)存泄漏發(fā)生的位置很尷尬,為系統(tǒng)控件等等,一眼看到后覺得不是我們的代碼的問題,這個(gè)時(shí)候就需要用AS的自帶工具進(jìn)行內(nèi)存泄漏檢查了。 2.使用AS的內(nèi)存分析工具進(jìn)行內(nèi)存泄漏檢查,使用過程如下
1)運(yùn)行app,然后選擇查看運(yùn)行內(nèi)存,如下圖
1)
2)點(diǎn)擊紅線所指向的按鈕,然后會(huì)出現(xiàn)如下圖所示效果:

3)稍等一分鐘左右就會(huì)在AS中出現(xiàn)如下內(nèi)容:

4)上面就是此時(shí)app占用內(nèi)存的情況分析了,當(dāng)然初看比較亂,我們要進(jìn)行篩選,如下圖:

首先紅色箭頭選中view樹結(jié)構(gòu),然后黃色箭頭選擇你自己的包名內(nèi)的文件,這時(shí)候就會(huì)看到圓圈圈中的內(nèi)容了,發(fā)現(xiàn)了沒有不是1或者0,說明這里有內(nèi)存泄漏,需要修改。好了,然后我選擇SquareView這個(gè)進(jìn)行分析,為什么是這個(gè)而不是activity或者fragment呢?因?yàn)閍ctivity和fragment中存在泄漏是由于里面的view引起的,點(diǎn)擊后看右側(cè)圖,再點(diǎn)擊后看下面的圖,藍(lán)綠色的箭頭指示位置就是具體是什么造成的內(nèi)存不能夠釋放。到此就可以根據(jù)具體位置進(jìn)行具體解決了。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注