前言
前一片文章講了Systrace的基本用發(fā),本片文章講解通過(guò)一個(gè)例子的分析,如何在生成的trace信息中找到你想要的內(nèi)容。
一. App啟動(dòng)方式以及啟動(dòng)流程
1.1 App啟動(dòng)方式
1>冷啟動(dòng):app沒(méi)有啟動(dòng)過(guò)或者進(jìn)程被殺死,系統(tǒng)不存在該app進(jìn)程,此時(shí)啟動(dòng)為冷啟動(dòng)。
2>熱啟動(dòng):app進(jìn)程只是出于后臺(tái),系統(tǒng)只是把它從后臺(tái)帶到前臺(tái),展示給用戶。
1.2 App啟動(dòng)流程

上圖來(lái)自https://my.oschina.net/jdking/blog/3019829/print
大致就是Lancher與AMS通信,AMS檢查是否存在當(dāng)前啟動(dòng)的進(jìn)程;如果對(duì)應(yīng)進(jìn)程不存在,AMS與Zygote通信,Zygote孵化出來(lái)新進(jìn)程;新進(jìn)程中ActivityThread的main方法執(zhí)行,加載資源,啟動(dòng)looper等,最后渲染出幀,完成應(yīng)用的啟動(dòng)。
二. App啟動(dòng)的trace分析
這里只講一下冷啟動(dòng)的方式,熱啟動(dòng)類似,上篇文件文章也將了如何抓起這個(gè)過(guò)程的trace信息,這里我們簡(jiǎn)單說(shuō)一下,在點(diǎn)擊應(yīng)用圖標(biāo)的之前,我們需要打開(kāi)DDMS,將Systrace的設(shè)置選項(xiàng)勾選好之后,點(diǎn)擊ok,接著點(diǎn)擊app圖標(biāo),完全啟動(dòng)幾秒之后,我們找到對(duì)應(yīng)生成的trace.html文件用Google Chrom打開(kāi),我這里如下圖(以下截圖是Pixel(API:R)模擬器抓取的trace)


首先我們從Luncher的進(jìn)程開(kāi)始分析,Luncher向AMS發(fā)送打開(kāi)應(yīng)用的的Event事件,AMS檢查目標(biāo)進(jìn)程還沒(méi)有啟動(dòng),請(qǐng)求Zygote孵化新進(jìn)程,ActivityThread發(fā)起bindApplication同時(shí)加載對(duì)應(yīng)apk資源,最后啟動(dòng)Activity
如想了解具體啟動(dòng)流程可以參考這篇文章
http://www.manongjc.com/article/25244.html


接下來(lái)就是開(kāi)始渲染對(duì)應(yīng)應(yīng)用的UI啦,Systrace以每一針的方式展示出來(lái),我們看下面的圖,在冷啟動(dòng)的方式下到界面完全顯示出來(lái),大約花了575ms,在正常啟動(dòng)時(shí)間的范圍內(nèi)(應(yīng)用冷啟動(dòng)1m的規(guī)定內(nèi))

總結(jié)
如果在啟動(dòng)的過(guò)程花費(fèi)了很長(zhǎng)時(shí)間,超出了規(guī)定的1m,我就可以通過(guò)這個(gè)流程,查看沒(méi)一段執(zhí)行的時(shí)間,分析那一個(gè)環(huán)節(jié)出現(xiàn)了比較耗時(shí)的操作,更方便的定位問(wèn)題的根本原因。
當(dāng)讓Systrace在分析UI卡頓上可能會(huì)更有優(yōu)勢(shì),后續(xù)會(huì)給大家分享一片關(guān)于UI卡頓的分析