Android性能優化之工具介紹

1、概述

在Android應用開發過程中,該如何發現性能問題呢?除了用戶在使用APP的過程中發現卡頓,有什麼方法可以監控卡頓嗎?本篇文章主要介紹一些Android爲我們已經提供的工具,如何去使用這些工具,通過這些工具幫助我們分析卡頓原因,最終解決卡頓等問題。

2、工具介紹

Android爲我們提供了很多非常優秀的工具來幫我們檢查應用性能問題,例如查看layout層次的Hierarchy View、檢查過度繪製或渲染的工具 Profile GPU Rendering和靜態代碼檢查工具Lint、Android Studio 自帶的 TraceView及Systrace 等。

2.1 Profile GPU Rendering的使用

什麼是Profile GPU Rendering?

它是一個圖形監測工具,能反應界面是否過度繪製;

打開Profile GPU Rendering,低版本的系統會繪製滾動的柱狀圖來顯示繪製每一幀所消耗的時間,高版本的系統只會顯示UI的繪製複雜度。

如何打開Profile GPU Rendering?

手機/模擬器-->開發者選項-->GPU 呈現模式(Profile GPU Rendering),具體如下圖:

圖2

從上圖可以看到一條橫着的綠線和很多條形柱,每一條柱狀圖都由 4 種顏色組成:紅、黃、藍、紫,這些線對應每一幀在不同階段的實際耗時。

綠色橫線

綠線代表16ms,要確保一秒內打到60fps,你需要確保這些幀的每一條線都在綠色的16ms標記線之下.任何時候你看到一個豎線超過了綠色的標記現,你就會看到你的動畫有卡頓現象產生。

藍色

藍色代表測量繪製的時間,也可以理解爲執行每一個 View的 onDraw 方法執行的時間,如果藍色的線很高時,有可能是因爲需要重新繪製,或者自定義視圖的onDraw函數處理事情太多。

紅色

紅色代表執行的時間,這部分是 Android 進行 2D 渲染 Display List 的時間。爲了繪製到 屏幕上,Android 需要使用 OpenGl ES 的 API 接口來繪製 Display List,這些 API 有效地將數據 發送到 GPU,最終在屏幕上顯示出來。當紅色的線非常高時,可能是由重新提交了視圖而導致的,例如改變View的大小、位置、顏色等。

橙色

橙色部分表示處理時間,或者是 CPU 告訴 GPU 渲染一幀的地方,這是一個阻塞調用, 因爲 CPU 會一直等待 GPU 發出接到命令的回覆,如果柱狀圖很高,就意味着 GPU 太繁忙了。

紫色

紫色段表示將資源轉移到渲染線程的時間,只有 Android 4.0 及以上版本纔會提供。

任何時候柱狀圖超過綠線(警戒線,對應時長 16ms),就有可能丟失一幀的內容,雖然對於大 部分應用來說,丟失幾幀確實感覺不出卡頓,但保持 UI 流暢的關鍵就在於讓這些垂直的柱 狀條儘可能地保持在綠線下面,通常我們只需要關注藍色、紅色和綠線就好。

除了如上方式可以通過柱狀圖來查看View是否過度繪製,其實Android系統還爲我們提供另一種方式來查看View是否過度繪製,具體步驟如下:

手機/模擬器-->開發者選項-->調試GPU過度繪製,

圖1

它一共分爲四個等級,藍色,淡綠,淡紅,深紅代表了4種不同程度的Overdraw情況,我們要儘量減少淡紅,深紅的模塊。

總結

GPU Profile Render 工具能夠很好地幫助你找到渲染相關的問題,但是要修復這些問題就不是那 麼簡單了。需要結合另一個耗時工具和代碼來具體分析,找到性能的瓶頸,並進行優化。在 GPU Profile Render 發現有問題的頁面後,可以通過另外一個工具 Hierarchy Viewer 來查看頁面的佈局層次和每個 View 所花的時間。

2.2 Hierarchy View的使用

Hierarchy Viewer Android SDK 自帶的一款可視化調試工具,用來檢查 Layout 嵌套及繪製時間,以可視化的佈局角度直觀獲取 Layout 佈局設計和各種屬性信息,開發者在調試和佈局 UI 界面時可以很方便地使用,提高用戶的開發效率。

比較遺憾的是,在高版本的Android studio,已經去掉了Hierarchy Viewer ,取而代之的是Layout Inspector,Layout Inspector只能查看到佈局層次,沒法看到View的繪製時間(meausre、layout、draw的時間)。

 

打開Hierarchy Viewer步驟: 

選擇Tools->Android->Android Device Monitor 菜單,直接打開 Hierarchy View(Android studio 2.0左右纔有)

打開Layout Inspector步驟:

選擇Tools->Layout Inspector (Android studio3.0)

 
下面分別給兩個圖來展示對應的界面,給予一個直觀的理解。

 

 

2.3 Systrace的使用

Systrace Android 4.1 及以上版本提供的性能數據採樣和分析工具。它可以幫助開發者收集 Android 關鍵子系統(如 surfaceflingerWindowManagerService Framework 部分關鍵模塊、服務,View 系統等)的運行信息,從而幫助開發者更直觀地分析系統瓶頸,改進性能。

 

由於 Systrace 是以系統的角度返回一些信息,並不能定位到具體耗時的方法,要進一步獲取 CPU 滿負荷運行的原因,就需要使用前面介紹過的工具 Traceview。具體詳情可以參考  性能優化工具(二)-Systrace

2.4 TraceView的使用

TraceView Android SDK 自帶的工具,用來分析函數調用過程,可以對 Android 的應用程序以及 Framework 層的代碼進行性能分析。它是一個圖形化的工具,最終會產生一個圖表,用於對性能分析進行說明,可以分析到應用具體每一個方法的執行時間,使用可以非常直觀簡單,分析性能問題很方便。

具體詳情可以參考   性能優化工具(三)-TraceView
 

2.5 Android Profiler

在Android studio 3.0之後,Google將Android Monitor 工具廢棄了,取而代之的是Android Profiler。Android Profiler 工具可提供實時數據,幫助您瞭解應用的 CPU、內存、網絡和電池資源使用情況。

具體詳情可以查看 利用 Android Profiler 測量應用性能

 

參考文檔

《Android應用性能優化最佳實踐》

性能優化工具(二)-Systrace

Android性能優化—TraceView的使用

UI優化之-GPU Rendering Profile

 

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