Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

目錄

1、Systrace 簡介
2、Systrace 使用方法
3、使用命令行抓取 Systrace
4、使用Systrace 檢測UI 性能
5、使用Systrace 檢測警告以及掉幀問題
6、查看trace 文件的快捷鍵
7、代碼中添加trace 標記具體分析問題所在
8、使用TraceView 分析trace Loghtml

1、Systrace 簡介

Systrace 容許你收集和檢查設備上運行的全部進程的計時信息。 它包括Androidkernel的一些數據(例如CPU調度程序,IO和APP Thread),而且會生成HTML報告,方便用戶查看分析trace內容。python

2、Systrace 使用方法

1. Systrace 的做用

若是想分析Android系統或者某個app的卡頓性能或者渲染問題,這時候Systrace 就很是有用。
首先咱們須要抓取Systrace文件,而後分析並找出引發系統卡頓,或者app反應慢的緣由,最好在源碼上解決引發卡頓、響應慢的問題。android

2. 抓取Systrace 的方法

抓取Systrace的方法以下:程序員

    1. 連接手機,打開DDMS

首先連接手機,打開Android Device Monitor,選擇要分析的進程(好比com.google.process.gapps),點擊Capture system wide trace using Android systrace(下圖右上角箭頭所指的地方)面試

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

    1. 配置須要抓取Systrace的內容

此時根據不一樣的卡頓問題需求,咱們配置抓取不一樣的trace。 抓取的Systrace時間請勿過長,不然會致使抓取內容部分丟失,而後點擊OK,操做要分析系統卡頓或app運行緩慢的部分,系統會自動收集運行時的信息,而後用Chrome 瀏覽器打開生成的trace 文件 。瀏覽器

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

    1. 抓取過屢次trace,請及時清理緩存

假如抓取過屢次trace,爲避免數據丟失,請及時清除緩存中的內容,清理地方在 Android Device Monitor的右下角,以下圖所示緩存

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

    1. 使用Chrome 分析trace

Chrome 瀏覽器打開生成的trace 文件,以下圖所示,裏面會包含每一個CPU,以及圖形渲染,輸入事件等等內容。網絡

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

抓取的Trace報告提供了Android系統進程在特定時間段內的總體狀況。 例如在顯示Activity或動畫時卡頓,Systrace會提供關於如何解決這些問題的建議。
可是,systrace不會在應用程序進程中收集有關代碼執行的信息。 有關您的應用程序執行哪些方法以及使用多少CPU資源的更多詳細信息,請使用Android Studio的內置CPUProfiler,或生成跟蹤日誌並使用Traceview查看它們。架構

3、使用命令行抓取 Systrace

1. 使用命令行抓取Systrace的準備工做

抓取systrace以前,請完成如下步驟:app

  1. 下載並安裝Android SDK Tools
  2. 安裝Python ,並將其包含在系統環境變量的path中。
  3. 鏈接手機,打開開發者選項中的USB Debug選項 。
  4. 查找Systrace腳本,存儲路徑以下:android-sdk/platform-tools/systrace/

2. 使用命令行抓取 Systrace的語法

使用命令行抓取 Systrace的語法以下:
python systrace.py [options] [categories]

3. 使用命令行抓取 Systrace舉例

例如,如下命令調用systrace10秒鐘內記錄設備進程,包括圖形進程,並生成一個名爲mynewtraceHTML報告:

python systrace.py --time=10 -o mynewtrace.html gfx

若是不指定任何類別或選項,systrace將生成包含全部可用類別的報告,並使用默認設置。 可用的類別取決於您使用的鏈接設備。

4. Systrace 參數解釋

  1. Global options

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

  1. Commands and command options

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

4、使用Systrace 檢測UI 性能

systrace對於檢查應用程序的UI性能特別有用,由於它能夠分析您的代碼和幀速率,進而識別問題區域,同時提供可工參考的解決方案。

1.使用Systrace 檢測UI 性能

首先,按照如下步驟進行操做:

  1. 鏈接手機並運行您的app
  2. 使用如下命令運行systrace:
    python systrace.py view --time = 10
  3. 操做您的應用 10秒後,systrace生成一個HTML報告。
  4. 使用網絡瀏覽器打開HTML報告。

使用Chrome 打開生成的trace 文件,檢測記錄期間設備CPU使用狀況,丟幀狀況,卡頓耗時狀況等等。

5、使用Systrace 檢測卡頓丟幀問題

以下Systrace報告列出了每一個進程呈現UI frame,並顯示沿着時間線的每一個渲染幀。 在綠色框架圓圈中,是指在16.6ms內呈現每秒穩定60幀。 花費16.6ms以上渲染的幀用黃色紅色圓圈表示。

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

在運行Android 5.0(API級別21)或更高版本的設備上, UI 渲染的工做主要由UI ThreadRenderThread兩個線程完成。 在以前的版本中,建立渲染框架的全部工做都是在UI Thread上完成的。

點擊一個F圓圈,它能夠提供系統爲渲染該frame 完成所包含的工做信息,包括警報,丟幀,建議等。
同時它還向您展現了在渲染該frame時系統正在執行的方法,所以您能夠調查這些方法是否致使UI jank

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

選擇黃色的frame後,您可能會在報告的底部窗格中看到如上提示信息。
上圖中顯示的Alert , 主要問題是在ListView回收和從新bind中花費了太多的時間。 trace中有相關事件的連接,點擊能夠獲取更多關於系統在這段時間內正在作什麼的事情。

要查看Systrace中發現的每一個Alert以及設備觸發Alert的次數,請單擊窗口最右側的Alerts選項卡,以下圖所示。
Alerts面板可幫助您查看發生了哪些問題,以及發生的頻率。 將Alert面板看做是要修復的錯誤列表, 一般狀況下,一個區域的微小變化或改進就能夠消除應用程序中的所有Alert。

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

若是你的代碼在UI Thread上作太多的工做,你須要找出哪些方法消耗了太多的CPU時間
一種方法是添加systrace(請參閱檢測應用代碼)到您認爲會致使這些卡頓或者致使慢的方法地方,而後查看這些函數調用是否顯示在systrace中。 若是您不肯定哪些方法可能會在UI線程上形成卡頓,請使用Android Studio的內置CPU Profiler,或者生成跟蹤日誌並使用Traceview查看它們。

6、查看trace 文件的快捷鍵

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

7、代碼中添加trace 標記方法

因爲systrace是在系統級顯示有關進程的信息,所以很難在HTML報告中查看某個特定時間內,您的應用程序正在執行什麼方法。 在Android 4.3(API級別18)及更高版本中,您可使用代碼中的Trace類在HTML報告中標記執行事件。 您不須要用代碼來記錄systrace的跟蹤記錄,這樣作能夠幫助您查看app代碼的哪些部分可能致使線程hung或UI丟幀。 可是這種方法與使用Debug類不一樣,Trace類簡單地將標誌添加到systrace報告中,而Debug類可幫助您生成.trace文件,而且檢查app CPU使用狀況。

要生成包含已檢測的跟蹤事件的systrace HTML報告,須要使用-a--app命令行選項運行systrace,並指定應用程序的包名稱。

一般咱們在懷疑引發jank代碼地方,添加以下內容:
Trace.beginSection("MyAdapter.onCreateViewHolder");
Trace.endSection(); 能夠查看自定義的從開始到結束期間的Systrace信息。這兩個是成對出現的,須要注意一下。

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

屢次調用beginSection(String)時,調用endSection()只會結束最近調用的beginSection(String)方法。 所以,對於嵌套的調用,例如上面示例中的調用,您須要確保經過調用endSection()將每一個調用正確匹配到beginSection()

此外,您不能在一個線程上調用beginSection()並從另外一個線程結束 - 您必須從同一線程調用endSection()

8、使用TraceView 分析trace Log

Traceview是提供Systrace的圖形顯示工具。 您能夠經過使用Debug類來設置代碼來生成log。 這種跟蹤方法很是精確,由於您能夠準確指定要啓動的代碼中的哪一個位置,並中止記錄Systrace數據。 使用Traceview檢查這些log可幫助您調試您的應用程序並剖析其性能。

另外,可使用命令行中的dmtracedump來生成跟蹤日誌文件的圖形調用堆棧圖。

若是您不須要查看經過使用Debug類檢測應用程序來記錄的Systrace日誌,則可使用Android Studio 3.0及更高版本中包含的CPU Profiler來查看應用程序的線程和記錄方法跟蹤。

1.trace Log 的打開方法

使用Android Device Monitor能夠查看trace Log內容,步驟以下,打開Android Device Monitor,選擇File,而後打開*.trace log分析。
固然,你也可使用Android Device Monitor 的圖形按鍵進行trace的抓取與查看。

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

2.Trace log 的分析

打開Trace log後,Traceview使用如下兩個窗格顯示log數據:

    1. 時間軸窗格:
      描述每一個線程什麼時候進入和退出方法的時間軸窗格
    1. 配置文件窗格:
      總結每一個線程在跟蹤日誌的執行期間的配置文件窗格
      如下各節提供有關traceview輸出窗格的附加信息。

3.Trace log 時間軸窗格

每一個線程的執行都顯示在本身的進程中,而且時間向右增長。 每種方法都以不一樣的顏色顯示。 第一行下方的細線顯示所選方法的子項(從入口到出口),以下圖所示。

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

4.Trace log配置文件窗格

以下圖所示,配置文件窗格提供了系統在Systrace期間每種方法的執行的列表以及耗時。

另外,調用另外一個方法的方法稱爲父級方法,父級調用的方法稱爲其子級。 當您經過單擊方法選擇一種方法時,它會在兩個單獨的節點下顯示其父項和子項。

對於配置文件窗格中的每一個頂級節點,表中的Calls + RecCalls / Total列(圖2中未顯示)將顯示該方法調用次數和遞歸調用次數。或者,對於父級和子級方法,此列顯示方法在頂級節點中是方法的子級或父級的調用次數。

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

最後對於程序員來講,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提高本身,歷來都是咱們去適應環境,而不是環境來適應咱們!

這裏附上上述的技術體系圖相關的幾十套騰訊、頭條、阿里、美團等公司19年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了很多精力),包含知識脈絡 + 諸多細節,因爲篇幅有限,這裏以圖片的形式給你們展現一部分。

相信它會給你們帶來不少收穫:

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

Android UI卡頓響應慢性能差怎麼辦?請用Systrace 來分析查看~

上述【高清技術腦圖】以及【配套的架構技術PDF】能夠 加我wx:X1524478394 免費獲取!

當程序員容易,當一個優秀的程序員是須要不斷學習的,從初級程序員到高級程序員,從初級架構師到資深架構師,或者走向管理,從技術經理到技術總監,每一個階段都須要掌握不一樣的能力。早早肯定本身的職業方向,才能在工做和能力提高中甩開同齡人。

相關文章
相關標籤/搜索