Android性能優(yōu)化—TraceView的使用

概述

TraceView是Android平臺(tái)配備一個(gè)很好的性能分析工具,它可以通過圖形化的方式讓我們了解我們要跟蹤的程序的性能,并且能具體到方法。

如何使用

  • 通過Android studio自帶的traceview查看(Android profiler)。
  • 通過Android SDK自帶的Debug。
  • 通過DDMS中的traceview查看。

通過Android studio自帶的traceview查看

通過Android studio 打開Android profiler 點(diǎn)擊其中的CPU就會(huì)有以下的界面。



如上圖所示,CPU Profiler的視圖包括以下內(nèi)容:
①App timeline:顯示CPU在執(zhí)行過程中的時(shí)間軸。
②線程 timeline:顯示線程列表以及每個(gè)線程在某個(gè)時(shí)間段占用的CPU的資源情況。
③CPU timeline:列出CPU在App運(yùn)行過程中CPU使用情況。
④Method Trace:在指定線程中,執(zhí)行的方法棧,橫行表示執(zhí)行的時(shí)間軸,縱向表示方法執(zhí)行的調(diào)用軸。

使用步驟
  • 打開CPU Profiler界面
  • 點(diǎn)擊下方的紅色圓點(diǎn),開始記錄(Record)堆棧(此時(shí)按鈕變灰色),記錄一段時(shí)間段后,再點(diǎn)擊下停止記錄(此時(shí)按鈕變紅色)
  • 在②區(qū)域選擇你用分析的線程
  • 在③區(qū)域中選擇要分析的CPU片段(只能有記錄的CPU片段)
  • 查看④區(qū)域,就會(huì)有一系列的執(zhí)行方法隊(duì)列顯示出來,通過橫向查看可以看出某個(gè)方法的執(zhí)行時(shí)間(橫向時(shí)間越長,執(zhí)行的時(shí)間越長),通過縱向表示方法的調(diào)用關(guān)系。
技術(shù)說明

②區(qū)域中,線程占用CPU資源,會(huì)有不同顏色標(biāo)記:

  • 綠色: 線程處于活動(dòng)狀態(tài)或準(zhǔn)備好使用CPU。也就是說,它處于”運(yùn)行”或”可運(yùn)行”狀態(tài)。
  • 黃色: 線程處于活動(dòng)狀態(tài),但是在完成其工作之前,它正在等待I / O操作(如文件或網(wǎng)絡(luò)I / O)。
  • 灰色: 線程正在睡眠,不會(huì)消耗任何CPU時(shí)間,當(dāng)線程需要訪問尚未可用的資源時(shí),有時(shí)會(huì)發(fā)生這種情況。要么線程進(jìn)入自愿性睡眠,要么內(nèi)核使線程休眠,直到所需的資源可用。

④區(qū)域中,不同的方法也會(huì)顏色也有所不同:

  • 橙色:系統(tǒng)方法
  • 藍(lán)色:第三方API(包括java語言的api)
  • 綠色:App自身方法

通過Android SDK自帶的Debug

  • 在開始記錄的點(diǎn)寫上代碼Debug.startMethodTracing("tracePath");
  • 在終止記錄的點(diǎn)寫上代碼Debug.stopMethodTracing();
  • 通過adb pull /mnt/sdcard/tracePath.trace .將trace導(dǎo)出指定的文件夾中
  • 通過Android studio打開trace文件,界面同CPU Profiler差不多。


優(yōu)點(diǎn)

能清晰分析指定業(yè)務(wù)、功能塊的方法執(zhí)行情況(代碼控制)。

通過DDMS中的traceview查看

前期準(zhǔn)備工作(以windows系統(tǒng)為基準(zhǔn))

1、下載Android SDK,下載地址就各顯神通了。
2、解壓或者安裝Android SDK。
3、解壓后的目錄下的{sdk.dir}\tools配置到Path環(huán)境中。

使用說明
  • 打開window命令指示符,即cmd命令

  • 在命令行中輸入monitor或者ddms(區(qū)分版本),打開界面


  • 如圖點(diǎn)擊紅色圈圈按鈕開始記錄,再次點(diǎn)擊后終止記錄且彈出以下界面


    • ①線程timeLine:線程在執(zhí)行過程消耗CPU/時(shí)間
    • ②執(zhí)行TimeLine: 時(shí)間軸
    • ③方法詳細(xì)信息軸:方法以及其調(diào)用方法的執(zhí)行/消耗CPU時(shí)間
  • 查看main線程,查看執(zhí)行時(shí)間長的時(shí)間段(②區(qū)域中同一個(gè)顏色起止時(shí)間)并點(diǎn)擊他,在③區(qū)域中會(huì)彈出對應(yīng)的方法棧信息,你就會(huì)發(fā)現(xiàn)有個(gè)Thread.sleep方法阻塞的main線程。

技術(shù)說明
  • Incl Cpu Time:方法在CPU中執(zhí)行所有時(shí)間(包含其調(diào)用的方法所消耗的時(shí)間)
  • Excl Cpu Time: 方法在CPU中執(zhí)行的時(shí)間(不包含其調(diào)用的方法所消耗的時(shí)間)
  • Incl Real Time:方法運(yùn)行消耗的所有時(shí)間(包含子方法)
  • Excl Real Time:方法運(yùn)行消耗的時(shí)間(不包含子方法)
  • Calls + Recur Calls/Total :方法調(diào)用、遞歸次數(shù)(重要指標(biāo),防止死循環(huán))
  • Cpu Time/Call :該方法平均占用 CPU 的時(shí)間(重要指標(biāo),可以看出單個(gè)方法占用CPU的平均時(shí)間,但是要防止在個(gè)別調(diào)用處出現(xiàn)長時(shí)間占用,然后被平均了)
  • Real Time/Call :平均執(zhí)行時(shí)間,包括切換、阻塞的時(shí)間(重要指標(biāo),可以看出單個(gè)方法執(zhí)行的平均時(shí)間值,但是要防止在個(gè)別調(diào)用處出現(xiàn)長時(shí)間調(diào)用,然后被平均了)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容