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),具體如下圖:
從上圖可以看到一條橫着的綠線和很多條形柱,每一條柱狀圖都由 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過度繪製,
它一共分爲四個等級,藍色,淡綠,淡紅,深紅代表了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 關鍵子系統(如 surfaceflinger、WindowManagerService 等 Framework 部分關鍵模塊、服務,View 系統等)的運行信息,從而幫助開發者更直觀地分析系統瓶頸,改進性能。
由於 Systrace 是以系統的角度返回一些信息,並不能定位到具體耗時的方法,要進一步獲取 CPU 滿負荷運行的原因,就需要使用前面介紹過的工具 Traceview。具體詳情可以參考 性能優化工具(二)-Systrace
2.4 TraceView的使用
TraceView 是 Android SDK 自帶的工具,用來分析函數調用過程,可以對 Android 的應用程序以及 Framework 層的代碼進行性能分析。它是一個圖形化的工具,最終會產生一個圖表,用於對性能分析進行說明,可以分析到應用具體每一個方法的執行時間,使用可以非常直觀簡單,分析性能問題很方便。
2.5 Android Profiler
在Android studio 3.0之後,Google將Android Monitor 工具廢棄了,取而代之的是Android Profiler。Android Profiler 工具可提供實時數據,幫助您瞭解應用的 CPU、內存、網絡和電池資源使用情況。
具體詳情可以查看 利用 Android Profiler 測量應用性能
參考文檔
《Android應用性能優化最佳實踐》