1. 程式人生 > >記憶體洩漏,記憶體溢位,ANR

記憶體洩漏,記憶體溢位,ANR

Android記憶體洩漏的檢測流程、捕捉以及分析

通常記憶體洩漏的隱藏性質比較強,不同於異常導致的程式Crash,在異常導致的Crash中,我們能夠及時的發現程式問題的存在,並通過log日誌定位到問題所在的具體位置,然後及時進行解決,而記憶體洩漏則不同,在APP中存在記憶體洩漏的情況下,使用者在低頻率短時間的使用中,並不能察覺到有什麼異樣,反之,隨著使用頻率的提高和使用時長的增加,記憶體洩漏就會一直慢慢積累,消耗記憶體,從而會導致手機卡頓,直至APP崩潰,所以防止APP記憶體洩漏的出現,是至關重要的。

關於記憶體洩漏的檢測,我們分為了以下幾個階段: 
1. 開發編碼過程中,在開發過程中就不斷對程式碼進行記憶體洩漏的檢測 
2. 專案或者模組開發完成後,對應用進行整體的記憶體洩漏檢測 
3. 在專案上線後,遠端端檢測專案是否存在記憶體洩漏的情況

一:開發編碼過程中,檢測記憶體洩漏

1.檢測工具:LeakCanary

首先最容日上手並且效果還不錯,那就要屬LeakCanary,效果也直觀,具體的使用配置也很簡單。

  1. 在專案的build.gradle中加入以下引用:
//    記憶體存洩漏檢測
    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'
  1. 在application中初始化LeakCanary,到此處配置完成
/**        Explain : 初始化記憶體洩漏檢測
    * @author LiXaing 
    private void initLeakCanary() {
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return;
        }
        LeakCanary.install(this);
    }

 在發生記憶體洩漏的時候,會在通知欄出現一個提示圖示,當點選進去之後,就是現在展示的這張圖片,會直觀的展示記憶體洩漏的位置。注意:通過LeakCanary的使用,它可以為我們快速找到記憶體洩漏的位置,但並不能夠提供我們記憶體洩漏的原因,有的時候,記憶體洩漏的位置是由於其他原因導致的。

二:專案或者模組開發完成後,檢測記憶體洩漏

android Studio中AndroidMonitor自帶的一個工具—>memory,這個工具也可以說是非常的好用,先簡單的介紹一下,memory雖然不可以分析出哪部分存在洩漏等情況,但可以很直觀的看到記憶體的佔用情況,看到記憶體的動態變化。

Android profile外掛,Android studio最新的控制元件,可以監測cpu的使用率,網路流量監控,以及記憶體使用情況。 

MAT(memory analyzer Tool)工具的使用