1. 程式人生 > >Android雜談:systrace簡單檢視一個應用的啟動流程

Android雜談:systrace簡單檢視一個應用的啟動流程

騰空.png

systrace是用來檢視應用和系統執行狀態的工具,利用他可以分析一些效能問題。例如檢視應用是否卡頓,卡在那個方法了之類的問題。本文簡單抓一個瀏覽器啟動的systrace隨便看看吧。

一.啟動Andriod Device Monitor

連線手機,啟動Andriod Device Monitor,點選一下下圖箭頭指向那個圖示


Andriod Device Monitor.png

設定抓取時間和抓取內容,點選OK就開始抓取了,隨意啟動操作下瀏覽器,5s後trace.html就生成了。


設定抓取時間和抓取內容.png

二.檢視Traced

生成的trace.html要用chrome瀏覽器開啟,瀏覽器輸入網址輸入chrome://tracing/,然後把trace.html拉進去就可以了。結果如下。

Paste_Image.png

整個檢視佈局:
1.CPU佔用情況,上圖可以看到有8個cpu
2.程序trace
3.每個程序的執行緒trace,執行緒主要看下主執行緒,即UI執行緒。

看下瀏覽器UI執行緒的流程,大概瞭解下瀏覽器啟動的流程。
首先是出現“POSTFORK”,這個其實是在Fork一個子程序,誰的子程序呢?Zoygote的。

瀏覽器UI執行緒.png
搜下原始碼,
/ frameworks/ base/ core/ java/ com/ android/ internal/ os/ Zygote.java
是程式跑到 forkAndSpecialize方法打出來的。
Paste_Image.png

然後依次是
RuntimeInit :準備虛擬機器資源
ActivityThreadMain :Activity主執行緒入口

Paste_Image.png

bindApplication:建立AMS與應用的binder通訊,可以看到他執行了很多子方法,包括開啟應用的odex,資源等


bindApplication.png

activityStart:這是回撥onactivitystart了,但這時介面應該還是不可見的。


activityStart.png

看下圖,activityStart執行後,渲染執行緒RenderThread才開始工作,所以這是才開始渲染,介面才開始可見。


Paste_Image.png

那這個應用啟動花了多少時間了?我們看一下,以POSTFORK到activityStart為準,總共花了615.176ms!!!!牛逼!!

啟動時間.png

總結

這篇文章,介紹了systrace的抓取與檢視方法。簡單分析了下一個應用啟動的systrace。用處不大,僅供吐槽。

      </div>
    </div>
</div>