Android性能分析工具“TraceView”,“Systrace UI”
1. TraceView
2.Systrace UI性能分析
3.TraceView,Systrace UI分析實例
(1)TraceView
- TraceView 是 AndroidSDK 自帶的工具,用來分析函數(shù)調(diào)用過程,可以對 Android 的應用 程序以及 Framework 層的代碼進行性能分析。它是一個圖形化的工具,最終會產(chǎn)生一個圖 表,用于對性能分析進行說明,可以分析到應用具體每一個方法的執(zhí)行時間,使用可以非常 直觀簡單,分析性能問題很方便。
使用方法
在使用 TraceVeiw 分析問題之前需要得到一個*.trace 的文件,然后通過 TraceView 來分 析 trace 文件的信息,trace 文件的獲取有兩種方式:
在DDMS中使用
(1)連接設(shè)備。
(2)打開應用
(3)打開 DDMS(若在 Android Studio 中則先打開 Android Device Monitor)。( 可以在\androidSDK\tools\monitor.bat打開)
(4)單擊 Strart Method Profiling 按鈕
(6)啟動后有兩個選項 我們先選擇第一個
(7) 在應用中操作需要監(jiān)控的點,比如進入一個 Activity 或者滑動一個列表,完 成后單擊 Stop Method Profiling 按鈕,如圖所示。
(7)結(jié)束后會生成.trace文件,并展示traceView試圖
- TraceView視圖說明
TraceView視圖分為兩部分,上半部分為時間面板,下半部分為分析面板
X 軸表示時間消耗,單位為毫秒(ms), Y 軸表示各個線程,每個線程中的不同方法使 用了不同的顏色來表示,顏色占用面積越寬,表示該方法占用 CPU 時間越長。
時間片面板可以放大/縮小,也可以指定區(qū)域放到最大,方便查看具體的過程,一般 優(yōu)先選擇放大耗時嚴重的區(qū)域。
- 分析面板如下圖所示
| Name | 所有的調(diào)用項,展開可以看到有的有Parent和Child子項,被指調(diào)用和調(diào)用 |
| Incl Cpu Time % | 某函數(shù)占用的CPU時間占總時間百分比,包含內(nèi)部調(diào)用其他函數(shù)調(diào)用CPU時間 |
| Incl Cpu Time | 某函數(shù)占用的CPU時間,包含內(nèi)部調(diào)用其他函數(shù)調(diào)用CPU時間 |
| Excl Cpu Time % | 某函數(shù)占用的CPU時間占用總時間百分比,但不包含內(nèi)部調(diào)用其他函數(shù)占用的CPU時間 |
| Excl Cpu Time | 某函數(shù)占用的CPU時間,但不包含內(nèi)部調(diào)用其他函數(shù)占用的CPU時間 |
| Incl Real Time % | 某函數(shù)運行的真實時間百分比 ,包含調(diào)用其他函數(shù)所用的時間 |
| Incl Real Time | 某函數(shù)運行的真實時間百分比,以毫秒為單位 ,包含調(diào)用其他函數(shù)所用的時間 |
| Incl Real Time % | 某函數(shù)運行的真實時間 ,不含調(diào)用其他函數(shù)所用的時間 |
| Incl Real Time | 某函數(shù)運行的真實時間,以毫秒為單位 ,不含調(diào)用其他函數(shù)所用的時間 |
| Call+Recur Calls/Total | 某函數(shù)被調(diào)用次數(shù) |
| CPU Time/Call | 某函數(shù)調(diào)用CPU時間與調(diào)用次數(shù)的比 ,相當于該函數(shù)平均執(zhí)行時間 |
| Real Time/Call | 同CPU Time/Call,只不過統(tǒng)計單位換成了真實時間 |
使用 TraceView 查看耗時,主要關(guān)注 Calls+Recur Calls/Total 和 Cpu Time/Call 這兩個值, 也就是關(guān)注調(diào)用次數(shù)多和耗時久的方法,然后優(yōu)化這些方法的邏輯和調(diào)用次數(shù),減少耗時。
注意 RealTime 與 cputime 區(qū)別為:因為 RealTime 包括了 CPU 的上下文切換、阻 塞、GC 等,所以 RealTime 方法的實際執(zhí)行時間要比 CPU Time 稍微長一點。
(2)Systrace UI性能分析
- 在應用程序開發(fā)過程中,UI(用戶界面)的流暢度是體驗的核心,特別是在動畫、跳轉(zhuǎn) 或者列表的滑動過程中,出現(xiàn)卡頓和無響應是非常影響用戶體驗的,要解決這些問題,首先 要找到問題的原因,前面介紹的 TraceView 是分析性能的一款利器,下面再介紹一個分析應 用程序 UI 性能的工具:Systrace。
- Systrace 是 Android 4.1 及以上版本提供的性能數(shù)據(jù)采樣和分析工具。它可以幫助開發(fā)者 收集 Android 關(guān)鍵子系統(tǒng)(如 surfaceflinger、WindowManagerService 等 Framework 部分關(guān)鍵 模塊、服務,View 系統(tǒng)等)的運行信息,從而幫助開發(fā)者更直觀地分析系統(tǒng)瓶頸,改進性 能。Systrace 的功能包括跟蹤系統(tǒng)的 I/O 操作、內(nèi)核工作隊列、CPU 負載等,在 UI 顯示性能 分析上提供很好的數(shù)據(jù),特別是在動畫播放不流暢、渲染卡等問題上。Systrace 工具可以跟 蹤、收集、檢查定時信息,可以很直觀地查看 CPU 周期消耗的具體時間,顯示每個線程和 進程的跟蹤信息,使用不同顏色來突出問題的嚴重性,并提供如何解決這些問題的建議。
- 注意 由于 Systrace 是以系統(tǒng)的角度返回一些信息,并不能定位到具體耗時的方 法,要進一步獲取 CPU 滿負荷運行的原因,就需要使用工具 Traceview .
(1)在DDMS中使用
1. 打開Android Device Monitor,連接手機并準備需要抓取的界面
2. 單機Systrace按鈕進入抓取前的設(shè)置,選擇需要跟蹤的內(nèi)容:
(2)使用命令行
使用命令行方式更靈活,速度更快,并且配置好后再使用能快速得到結(jié)果,在 Android 4.3 及更高版本的設(shè)備上使用 Systrace 時,可以省略設(shè)置跟蹤類別標簽來獲取默認值,或者 可以手動列入指定標簽。路徑和命令如下:
其中參數(shù)設(shè)置對應的功能如下:
| -h,–help | 幫助信息 |
| -o < FILE> | 保存的文件名 |
| -t N,–time=N | 多少秒內(nèi)的數(shù)據(jù),默認為5s,以當前的時間點往后倒N秒時間 |
| -b N,–buf-size=N | 單位為千字節(jié),限制數(shù)據(jù)大小 |
| -k< KFUNCS> --ktrace=< KFUNCS> | 追蹤特殊方法 |
| -l,–list-categories | 設(shè)備需要追蹤的標簽 |
| -a < APP_NAME> ,-app=< APP_NAME> | 包名 |
| –from-file=< FROM_FILE> | 創(chuàng)建報告的來源trace文件 |
| -e< DEVICE_SERIAL> , --serial=< DEVICE_SERIAL> | 設(shè)備號 |
(2)應用中獲取,Systrace不會追蹤應用的所有工作,所以在有需求的情況下,需要添加追蹤的代碼部分。可以通過trace類來實現(xiàn)這個功能。它能夠讓你在任何時候跟蹤應用的一舉一動。在獲取Trace的過程中,即Trace.beginSection()與Trace.endSection()之間的代碼工作會一直被追蹤。
override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)Trace.beginSection("MainActivityTrace")//開始btn.setOnClickListener {Toast.makeText(this, "Trace", Toast.LENGTH_SHORT).show()Trace.endSection()//結(jié)束}}可以定義多個Trace模塊,但是beginSection和endSection需要成對出現(xiàn),如果只有開始沒有結(jié)束會嚴重影響應用的性能。
簽名獲取的trace.html文件。有一些常用的快捷鍵
| W | 放大 |
| S | 縮小 |
| A | 左移 |
| D | 右移 |
其中和UI繪制關(guān)系最密切的是Alerts和Frame
(1)Alerts
從上圖可以看到,Alerts一欄標記了性能有問題的點,單機該點可以查看詳細信息,在右邊側(cè)邊欄有一個Alerts框,單機可以查看每個類型Alerts的數(shù)量,單機某一個Alert可以看到問題的詳細描述。
(2)Frame
每個應用都有一行專門顯示 frame,每一幀就顯示為一個綠色的圓圈。當顯示為黃色或 者紅色時,它的渲染時間超過了 16.6ms(即達不到 60fps 的水準)。使用 W 鍵放大,看看這 一幀的渲染過程中系統(tǒng)到底做了什么,同時它會將任何它認為性能有問題的東西都高亮警告, 并提示要怎么優(yōu)化。如圖所示,在 Frame 欄有一個 F 幀紅色告警,從下面 的問題詳細描述可以看出,警告的主要原因測量布局花了很長的時間,繪圖draw花了很長的時間,Scheduling delay(調(diào)度延遲)的意思就是一個線程在處理一塊運算的時候,在很長一段時間都沒有被分配到CPU上面做運算,從而導致這個線程在很長一段時間都沒有完成工作。我們發(fā)現(xiàn)這幀只運行了1.6ms,而有100多ms是在休眠,這意味著這一幀的渲染過程非常慢。在 Systrace 中也會提供一些對應鏈接,提供更多解釋。
- 如果想知道 UI 線程怎么會花費這么多時間的話,就需要使用 TraceView, 來分析具體是哪些函數(shù)在消耗時間。 接下來會分析TraceView。
(3)TraceView,Systrace UI分析實例
實例分析直通車
總結(jié)
以上是生活随笔為你收集整理的Android性能分析工具“TraceView”,“Systrace UI”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java之小球碰撞反弹
- 下一篇: SAP ABAP SD常用数据库表