###常見的效能優化的幫助工具: MAT, Memory Monitor(屬於AndroidMonitor中一個模組), HeapTool(檢視堆資訊), Allaction Tracking, LeakCanary Lint工具
上一篇裡面我們介紹了AndroidMonitor和MAT,HeapTool報告分析,那麼今天繼續介紹Allaction Tracking,LeakCanary以及Lint工具。
###Allaction Tracking
追蹤記憶體分配資訊。可以很直觀地看到某個操作的記憶體是如何進行一步一步地分配的。下面簡單介紹一下,首先執行我們的專案,然後在AndroidMonitor的皮膚上面點選第三個圖示,開始分析,在此之前我們也可以先手動GC多幾遍,使得記憶體比較穩定:
再次點選第三個圖示,停止分析,那麼AS會自動幫我們開啟一個alloc檔案,也可以檢視餅狀圖(點選Group by Methd右邊的餅狀圖圖示),在這裡你可能找不到自己的類的分配,這裡我推薦大家使用DDMS。
如下圖所示,開啟DDMS,左邊選擇我們APP的程式,然後在右邊的Allocation Tracker選項卡里麵點選start Tracking,在這個期間我們旋轉螢幕,使得LeakActivity有一個重新構建(分配記憶體)的過程。然後點選Get Allocations,然後點選stop Tracking結束採集過程。
在那麼多的資訊中,我們可以通過搜尋過濾出我們自己的類,比如LeakActivity,在下面的皮膚中可以詳細地看到我們LeakActivity在記憶體裡面是如何被一步一步分配的,相信熟悉原始碼的朋友對於這些一定不會陌生,所以說這個工具對於追蹤原始碼、學習原始碼很有意義。
###使用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工具可以分析的東西比較多:
檢測資原始檔是否有沒有用到的資源。
檢測常見記憶體洩露
安全問題SDK版本安全問題
是否有費的程式碼沒有用到
程式碼的規範---甚至駝峰命名法也會檢測
自動生成的羅列出來
沒用的導包
可能的bug
複製程式碼
如果覺得我的文字對你有所幫助的話,歡迎關注我的公眾號:
我的群歡迎大家進來探討各種技術與非技術的話題,有興趣的朋友們加我私人微信huannan88,我拉你進群交(♂)流(♀)。