Android雜談:systrace簡(jiǎn)單查看一個(gè)應(yīng)用的啟動(dòng)流程

騰空.png

systrace是用來(lái)查看應(yīng)用和系統(tǒng)運(yùn)行狀態(tài)的工具,利用他可以分析一些性能問(wèn)題。例如查看應(yīng)用是否卡頓,卡在那個(gè)方法了之類的問(wèn)題。本文簡(jiǎn)單抓一個(gè)瀏覽器啟動(dòng)的systrace隨便看看吧。

一.啟動(dòng)Andriod Device Monitor

連接手機(jī),啟動(dòng)Andriod Device Monitor,點(diǎn)擊一下下圖箭頭指向那個(gè)圖標(biāo)


Andriod Device Monitor.png

設(shè)置抓取時(shí)間和抓取內(nèi)容,點(diǎn)擊OK就開(kāi)始抓取了,隨意啟動(dòng)操作下瀏覽器,5s后trace.html就生成了。


設(shè)置抓取時(shí)間和抓取內(nèi)容.png

二.查看Traced

生成的trace.html要用chrome瀏覽器打開(kāi),瀏覽器輸入網(wǎng)址輸入chrome://tracing/,然后把trace.html拉進(jìn)去就可以了。結(jié)果如下。

Paste_Image.png

整個(gè)視圖布局:
1.CPU占用情況,上圖可以看到有8個(gè)cpu
2.進(jìn)程trace
3.每個(gè)進(jìn)程的線程trace,線程主要看下主線程,即UI線程。

看下瀏覽器UI線程的流程,大概了解下瀏覽器啟動(dòng)的流程。
首先是出現(xiàn)“POSTFORK”,這個(gè)其實(shí)是在Fork一個(gè)子進(jìn)程,誰(shuí)的子進(jìn)程呢?Zoygote的。

瀏覽器UI線程.png

搜下源碼,
/frameworks/base/core/java/com/android/internal/os/Zygote.java
是程序跑到forkAndSpecialize方法打出來(lái)的。
Paste_Image.png

然后依次是
RuntimeInit :準(zhǔn)備虛擬機(jī)資源
ActivityThreadMain :Activity主線程入口

Paste_Image.png

bindApplication:建立AMS與應(yīng)用的binder通信,可以看到他執(zhí)行了很多子方法,包括打開(kāi)應(yīng)用的odex,資源等


bindApplication.png

activityStart:這是回調(diào)onactivitystart了,但這時(shí)界面應(yīng)該還是不可見(jiàn)的。


activityStart.png

看下圖,activityStart執(zhí)行后,渲染線程RenderThread才開(kāi)始工作,所以這是才開(kāi)始渲染,界面才開(kāi)始可見(jiàn)。


Paste_Image.png

那這個(gè)應(yīng)用啟動(dòng)花了多少時(shí)間了?我們看一下,以POSTFORK到activityStart為準(zhǔn),總共花了615.176ms!?。?!牛逼??!

啟動(dòng)時(shí)間.png

總結(jié)

這篇文章,介紹了systrace的抓取與查看方法。簡(jiǎn)單分析了下一個(gè)應(yīng)用啟動(dòng)的systrace。用處不大,僅供吐槽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容