Android 效能優化之旅3 記憶體分析工具的使用(下)

小楠總發表於2017-12-21

###常見的效能優化的幫助工具: MAT, Memory Monitor(屬於AndroidMonitor中一個模組), HeapTool(檢視堆資訊), Allaction Tracking, LeakCanary Lint工具

上一篇裡面我們介紹了AndroidMonitor和MAT,HeapTool報告分析,那麼今天繼續介紹Allaction Tracking,LeakCanary以及Lint工具。

###Allaction Tracking

追蹤記憶體分配資訊。可以很直觀地看到某個操作的記憶體是如何進行一步一步地分配的。下面簡單介紹一下,首先執行我們的專案,然後在AndroidMonitor的皮膚上面點選第三個圖示,開始分析,在此之前我們也可以先手動GC多幾遍,使得記憶體比較穩定:

工具欄.png

再次點選第三個圖示,停止分析,那麼AS會自動幫我們開啟一個alloc檔案,也可以檢視餅狀圖(點選Group by Methd右邊的餅狀圖圖示),在這裡你可能找不到自己的類的分配,這裡我推薦大家使用DDMS。

記憶體分配分析.png

如下圖所示,開啟DDMS,左邊選擇我們APP的程式,然後在右邊的Allocation Tracker選項卡里麵點選start Tracking,在這個期間我們旋轉螢幕,使得LeakActivity有一個重新構建(分配記憶體)的過程。然後點選Get Allocations,然後點選stop Tracking結束採集過程。

DDMS.png

在那麼多的資訊中,我們可以通過搜尋過濾出我們自己的類,比如LeakActivity,在下面的皮膚中可以詳細地看到我們LeakActivity在記憶體裡面是如何被一步一步分配的,相信熟悉原始碼的朋友對於這些一定不會陌生,所以說這個工具對於追蹤原始碼、學習原始碼很有意義。

DDMS1.png

###使用LeakCanary檢測記憶體洩漏

Square公司的一個開源記憶體洩漏分析工具,是在手機上執行的,可以直接在手機端檢視記憶體洩露的工具。

基本使用:

1、新增依賴。

        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'
複製程式碼

2、在Application裡面初始化。

        public class App extends Application {

            public static Context sContext;

            @Override
            public void onCreate() {
                super.onCreate();
                sContext = this;
                initLeakCanary();
            }

            private void initLeakCanary() {
                if (LeakCanary.isInAnalyzerProcess(this)) {
                    // This process is dedicated to LeakCanary for heap analysis.
                    // You should not init your app in this process.
                    return;
                }
                LeakCanary.install(this);
            }
        }
複製程式碼

3、發生記憶體洩漏的時候,會自動彈出通知。

實現原理:兩個程式,本質上還是用命令控制生成hprof檔案分析檢查記憶體洩露。 然後傳送通知。 Application install() LeakCanary androidWatcher() RefWatcher new AndroidWatcherExecutor() --->dumpHeap()/analyze()(--->runAnalysis())--->Hprof檔案分析 new AndroidHeapDumper() new ServiceHeapDumpListener

###Lint分析工具(Eclipse時期就已經有的) Android Studio很方便,很好用,你可以試試點選AS選單欄上面的Analyze選項,然後點選Inspection Scope,然後選擇你需要檢測的範圍(比如整個專案),然後AS會自動彈出下圖所示的皮膚,在皮膚左邊列出了一些問題,在右邊列出了修改的建議等等,這裡不詳細介紹,大家自己慢慢操作體會一下,遇到不懂的單詞百度翻譯一下就好,所見即所得,啊哈。

lint.png

Lint工具可以分析的東西比較多:

        檢測資原始檔是否有沒有用到的資源。
        檢測常見記憶體洩露
        安全問題SDK版本安全問題
        是否有費的程式碼沒有用到
        程式碼的規範---甚至駝峰命名法也會檢測
        自動生成的羅列出來
        沒用的導包
        可能的bug
複製程式碼

如果覺得我的文字對你有所幫助的話,歡迎關注我的公眾號:

公眾號:Android開發進階

我的群歡迎大家進來探討各種技術與非技術的話題,有興趣的朋友們加我私人微信huannan88,我拉你進群交(♂)流(♀)

相關文章