Android性能优化—TraceView的使用
概述
TraceView是Android平臺配備一個很好的性能分析工具,它可以通過圖形化的方式讓我們了解我們要跟蹤的程序的性能,并且能具體到方法。
如何使用
- 通過Android studio自帶的traceview查看(Android profiler)。
- 通過Android SDK自帶的Debug。
- 通過DDMS中的traceview查看。
通過Android studio自帶的traceview查看
通過Android studio 打開Android profiler 點擊其中的CPU就會有以下的界面。
如上圖所示,CPU Profiler的視圖包括以下內容:
①App timeline:顯示CPU在執行過程中的時間軸。
②線程 timeline:顯示線程列表以及每個線程在某個時間段占用的CPU的資源情況。
③CPU timeline:列出CPU在App運行過程中CPU使用情況。
④Method Trace:在指定線程中,執行的方法棧,橫行表示執行的時間軸,縱向表示方法執行的調用軸。
使用步驟
- 打開CPU Profiler界面
- 點擊下方的紅色圓點,開始記錄(Record)堆棧(此時按鈕變灰色),記錄一段時間段后,再點擊下停止記錄(此時按鈕變紅色)
- 在②區域選擇你用分析的線程
- 在③區域中選擇要分析的CPU片段(只能有記錄的CPU片段)
- 查看④區域,就會有一系列的執行方法隊列顯示出來,通過橫向查看可以看出某個方法的執行時間(橫向時間越長,執行的時間越長),通過縱向表示方法的調用關系。
技術說明
②區域中,線程占用CPU資源,會有不同顏色標記:
- 綠色: 線程處于活動狀態或準備好使用CPU。也就是說,它處于”運行”或”可運行”狀態。
- 黃色: 線程處于活動狀態,但是在完成其工作之前,它正在等待I / O操作(如文件或網絡I / O)。
- 灰色: 線程正在睡眠,不會消耗任何CPU時間,當線程需要訪問尚未可用的資源時,有時會發生這種情況。要么線程進入自愿性睡眠,要么內核使線程休眠,直到所需的資源可用。
④區域中,不同的方法也會顏色也有所不同:
- 橙色:系統方法
- 藍色:第三方API(包括java語言的api)
- 綠色:App自身方法
通過Android SDK自帶的Debug
-
在開始記錄的點寫上代碼Debug.startMethodTracing(“tracePath”);
-
在終止記錄的點寫上代碼Debug.stopMethodTracing();
-
通過adb pull /mnt/sdcard/tracePath.trace .將trace導出指定的文件夾中
-
通過Android studio打開trace文件,界面同CPU Profiler差不多。
優點
能清晰分析指定業務、功能塊的方法執行情況(代碼控制)。
通過DDMS中的traceview查看
前期準備工作(以windows系統為基準)
1、 下載Android SDK,下載地址就各顯神通了。
2、 解壓或者安裝Android SDK。
3、 解壓后的目錄下的{sdk.dir}\tools配置到Path環境中。
使用說明
-
打開window命令指示符,即cmd命令
-
在命令行中輸入monitor或者ddms(區分版本),打開界面
-
如圖點擊紅色圈圈按鈕開始記錄,再次點擊后終止記錄且彈出以下界面
- ①線程timeLine:線程在執行過程消耗CPU/時間
- ②執行TimeLine: 時間軸
- ③方法詳細信息軸:方法以及其調用方法的執行/消耗CPU時間
-
查看main線程,查看執行時間長的時間段(②區域中同一個顏色起止時間)并點擊他,在③區域中會彈出對應的方法棧信息,你就會發現有個Thread.sleep方法阻塞的main線程。
技術說明
- Incl Cpu Time:方法在CPU中執行所有時間(包含其調用的方法所消耗的時間)
- Excl Cpu Time: 方法在CPU中執行的時間(不包含其調用的方法所消耗的時間)
- Incl Real Time:方法運行消耗的所有時間(包含子方法)
- Excl Real Time:方法運行消耗的時間(不包含子方法)
- Calls + Recur Calls/Total :方法調用、遞歸次數(重要指標,防止死循環)
- Cpu Time/Call :該方法平均占用 CPU 的時間(重要指標,可以看出單個方法占用CPU的平均時間,但是要防止在個別調用處出現長時間占用,然后被平均了)
- Real Time/Call :平均執行時間,包括切換、阻塞的時間(重要指標,可以看出單個方法執行的平均時間值,但是要防止在個別調用處出現長時間調用,然后被平均了)
總結
以上是生活随笔為你收集整理的Android性能优化—TraceView的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ctfmon是什么启动项_ctfmon是
- 下一篇: 依赖包是什么东西