讀完本文你將了解到:
今天瀏覽了1篇文章 《Android性能優(yōu)化(1)之啟動加速35%》挺不錯的,有興趣的可以去看下。
作者在文中為了定位啟動耗時的問題,使用了 TraceView。
之前知道但是1直沒用過這個工具,今天拭心和大家1起學(xué)習(xí)下它 (? ??_??)?。
TraceView 是 Android SDK 中內(nèi)置的1個工具,它可以加載 trace 文件,用圖形的情勢展現(xiàn)代碼的履行時間、次數(shù)及調(diào)用棧,便于我們分析。
trace 文件是 log 信息文件的1種,可以通過代碼,Android Studio,或 DDMS 生成。
使用 Android SDK 提供的工具可以生成很多 log 文件,便于我們分析當(dāng)前利用的內(nèi)存、布局等狀態(tài),下面是幾種文件的截圖:
手機卡頓很多時候都是由于某個操作過于耗時,在茫茫代碼中查找首惡未免太過痛苦,這時候候就該體現(xiàn) TraceView 的價值了。
生成 trace 文件有3種方法:
Debug.startMethodTracing("shixintrace"); //開始 trace,保存文件到 "/sdcard/shixintrace.trace"
// ...
Debug.stopMethodTracing(); //結(jié)束
代碼很簡單,當(dāng)你調(diào)用開始代碼的時候,系統(tǒng)會生產(chǎn) trace 文件,并且產(chǎn)生追蹤數(shù)據(jù),當(dāng)你調(diào)用結(jié)束代碼時,會將追蹤數(shù)據(jù)寫入到 trace 文件中。
下1步使用 adb 命令將 trace 文件導(dǎo)出到電腦:
adb pull /sdcard/shixintrace.trace /tmp
使用代碼生成 trace 方式的好處是容易控制追蹤的開始和結(jié)束,缺點就是步驟略微多了1點。
Android Studio 內(nèi)置的 Android Monitor 可以很方便的生成 trace 文件到電腦。
在 CPU 監(jiān)控的那欄會有1個鬧鐘似的的按鈕,未啟動利用時是灰色:
啟動利用后,這個按鈕會變亮,點擊后開始追蹤,相當(dāng)于代碼調(diào)用 startMethodTracing:
當(dāng)要結(jié)束追蹤時再次點擊這個按鈕,就會生成 trace 文件了。
生成 trace 后 Android Studio 自動加載的 traceview 圖形以下:
從這個圖可以大概了解1些方法的履行時間、次數(shù)和調(diào)用關(guān)系,也能夠搜索過濾特定的內(nèi)容。
左上角可以切換不同的線程,這其實也是直接用 Android Studio 查看 trace 文件的缺點:沒法直觀地對照不同線程的履行時間。
鼠標(biāo)懸浮到黃色的矩形上,會顯示對應(yīng)方法的開始、結(jié)束時間,和自己占用和調(diào)用其他方法占用的時間比例:
DDMS 即 Dalvik Debug Monitor Server ,是 Android 調(diào)試監(jiān)控工具,它為我們提供了截圖,查看 log,查看視圖層級,查看內(nèi)存使用等功能,可以說是如今 Android Studio 中內(nèi)置的 Android Monitor 的前身。
雙擊 shift 彈出全局搜索,搜索 “Android Device Monitor”:
或直接在 設(shè)置里設(shè)置 Android Device Monitor 的快捷鍵:
打開 Android Device Monitor,在 DDMS 中打開 trace 文件,DDMS 會啟動 TraceView 加載 trace 文件:
上圖介紹了 TraceView 的大致內(nèi)容:
點擊下面的任意1個方法,可以看到它的詳細信息:
定位問題時 TraceView 的使用方式:
排序后,然后逐一排查是不是有項目代碼或依賴庫代碼,有的話點擊查看詳情,查看是這個方法還是調(diào)用的子方法的問題,進1步定位問題。
Traceview 中信息太多,想要查找可使用最下方的 find:
但是目前 DDMS 中的 TraceView 有 bug,find 沒法使用,許多人給 Google 提 issue 提了 5 年也沒有解決 ╮(╯_╰)╭ :
(圖片截自:https://code.google.com/p/android/issues/detail?id=38825)
直接打開 SDK 中的 TraceView :
然后打開之前生成的 trace 文件:
如果直接打開 traceview 有問題,可以通過命令行 traceview 打開:
雖然提示 deprecated,但最少在搜索上還是比 Android Device Monitor 中好用。
在發(fā)現(xiàn)某個頁面或操作會卡頓時,可使用 TraceView 定位問題代碼。
比如啟動,加載圖片列表卡頓等情況。
Android SDK 中提供了許多工具幫助我們發(fā)現(xiàn)問題,在學(xué)會使用工具之余,還是要加強本身對性能要求的意識。
https://developer.android.com/training/articles/perf-tips.html
還有1點,不要過早優(yōu)化!
Android 性能優(yōu)化:使用 Lint 優(yōu)化代碼、去除過剩資源
Android 性能優(yōu)化:多線程系列開篇
歡迎掃描關(guān)注我的微信公眾號 安卓進化論,1起成為更優(yōu)秀的 programmer (? ??_??)? !
https://developer.android.com/studio/profile/traceview.html
https://code.google.com/p/android/issues/detail?id=38825
http://www.cnblogs.com/sunzn/p/3192231.html
https://gold.xitu.io/post/5874bff0128fe1006b443fa0