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

目錄

一、Systrace 簡介
二、Systrace 使用方法
三、使用命令行抓取 Systrace
四、使用Systrace 檢測UI 性能
五、使用Systrace 檢測警告以及掉幀問題
六、查看trace 文件的快捷鍵
七、代碼中添加trace 標記具體分析問題所在
八、使用TraceView 分析trace Log

一、Systrace 簡介

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

二、Systrace 使用方法

1. Systrace 的作用

如果想分析Android系統或者某個app的卡頓性能或者渲染問題,這時候Systrace 就非常有用。
首先我們需要抓取Systrace文件,然後分析並找出引起系統卡頓,或者app反應慢的原因,最好在源碼上解決引起卡頓、響應慢的問題。

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查看它們。

三、使用命令行抓取 Systrace

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

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

  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 來分析查看~

四、使用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使用情況,丟幀情況,卡頓耗時情況等等。

五、使用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查看它們。

六、查看trace 文件的快捷鍵

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

七、代碼中添加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()

八、使用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 免費獲取!

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章