systrace是用來查看應用和系統運行狀態的工具,利用他可以分析一些性能問題。例如查看應用是否卡頓,卡在那個方法了之類的問題。本文簡單抓一個瀏覽器啟動的systrace隨便看看吧。
一.啟動Andriod Device Monitor
連接手機,啟動Andriod Device Monitor,點擊一下下圖箭頭指向那個圖標
設置抓取時間和抓取內容,點擊OK就開始抓取了,隨意啟動操作下瀏覽器,5s后trace.html就生成了。
二.查看Traced
生成的trace.html要用chrome瀏覽器打開,瀏覽器輸入網址輸入chrome://tracing/,然后把trace.html拉進去就可以了。結果如下。
整個視圖布局:
1.CPU占用情況,上圖可以看到有8個cpu
2.進程trace
3.每個進程的線程trace,線程主要看下主線程,即UI線程。
看下瀏覽器UI線程的流程,大概了解下瀏覽器啟動的流程。
首先是出現“POSTFORK”,這個其實是在Fork一個子進程,誰的子進程呢?Zoygote的。
搜下源碼,
/frameworks/base/core/java/com/android/internal/os/Zygote.java
是程序跑到forkAndSpecialize方法打出來的。
然后依次是
RuntimeInit :準備虛擬機資源
ActivityThreadMain :Activity主線程入口
bindApplication:建立AMS與應用的binder通信,可以看到他執行了很多子方法,包括打開應用的odex,資源等
activityStart:這是回調onactivitystart了,但這時界面應該還是不可見的。
看下圖,activityStart執行后,渲染線程RenderThread才開始工作,所以這是才開始渲染,界面才開始可見。
那這個應用啟動花了多少時間了?我們看一下,以POSTFORK到activityStart為準,總共花了615.176ms?。。。∨1疲。?/p>
總結
這篇文章,介紹了systrace的抓取與查看方法。簡單分析了下一個應用啟動的systrace。用處不大,僅供吐槽。