App 啟動(dòng)優(yōu)化 之 背景知識

啟動(dòng)類型

冷啟動(dòng)

click event -> IPC -> Process.start -> ActivityThread -> bindApplication -> LifeCycle -> ViewRootImpl

熱啟動(dòng)

后臺 -> 前臺

溫啟動(dòng)

Lifecycle

啟動(dòng)相關(guān)任務(wù)

  1. 啟動(dòng)App
  2. 加載空白window
  3. 創(chuàng)建進(jìn)程
  4. 創(chuàng)建Application
  5. 啟動(dòng)主線程
  6. 創(chuàng)建MainActivity
  7. 加載布局
  8. 布置屏幕
  9. 首幀繪制

優(yōu)化方向

Application和Activity生命周期

啟動(dòng)時(shí)間的測量

方式1:adb命令(適合本地使用)

adb shell am start -W packagename/首屏Activity(含有包名)
JamesdeMBP:~ zhanxuzhao$ adb shell am start -W com.example.demo_0227/com.example.demo_0227.SplashActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.demo_0227/.SplashActivity }
Status: ok
Activity: com.example.demo_0227/.MainActivity
ThisTime: 123
TotalTime: 285
WaitTime: 304
Complete

ThisTime:最后一個(gè)Activity啟動(dòng)耗時(shí)(如MainActivity,不會包含前面的SplashActivity)

TotalTime:所有Activity啟動(dòng)耗時(shí)

WaitTime:AMS啟動(dòng)Activity總耗時(shí)

ThisTime < TotalTime < WaitTime

方式二:手動(dòng)打點(diǎn)(可以線上統(tǒng)計(jì))

開始點(diǎn):

Application#attachBaseContext()

結(jié)束點(diǎn):

方案一:首幀開始繪制(不推薦)

onWindowFocusChanged

方案二:真實(shí)數(shù)據(jù)展示(第一條feed加載:onBindViewHolder)

onBindViewHolder
holder.linearLayout.getViewTreeOvserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){
    @Override
    public boolean onPregraw(){
    LaunchTimer.endRecord();
    holder.linearLayout.getViewTreeObserver().removeOnPredrwaListener(this);
    return true;}
}

性能檢測工具

traceview

Debug.startMethodTracing("fileName"); // 方法開始
Debug.stopMethodTracing(); // 方法結(jié)束

生成文件路徑:sdcard/android/data/packagename/files

image

特點(diǎn):
可以統(tǒng)計(jì)方法調(diào)用關(guān)系理澎、耗費(fèi)時(shí)間嗜逻。

缺點(diǎn):
運(yùn)行時(shí)開銷嚴(yán)重,整體都會變慢。

systrace

結(jié)合 Android 內(nèi)核數(shù)據(jù)尿贫, 生成 html 報(bào)告

TraceCompat.beginSection("section name");
TraceCompat.endSection();

特點(diǎn)
輕量級,開銷小个少。
直觀反映CPU利用率。

優(yōu)雅獲取方法耗時(shí)

AOP(Aspect Oriented Programming)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眯杏,一起剝皮案震驚了整個(gè)濱河市夜焦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岂贩,老刑警劉巖茫经,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萎津,居然都是意外死亡卸伞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門锉屈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荤傲,“玉大人,你說我怎么就攤上這事颈渊∷焓颍” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵俊嗽,是天一觀的道長雾家。 經(jīng)常有香客問我,道長乌询,這世上最難降的妖魔是什么榜贴? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮妹田,結(jié)果婚禮上唬党,老公的妹妹穿的比我還像新娘。我一直安慰自己鬼佣,他們只是感情好驶拱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晶衷,像睡著了一般蓝纲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晌纫,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天税迷,我揣著相機(jī)與錄音,去河邊找鬼锹漱。 笑死箭养,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哥牍。 我是一名探鬼主播毕泌,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼喝检,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撼泛?” 一聲冷哼從身側(cè)響起挠说,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愿题,沒想到半個(gè)月后损俭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抠忘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年撩炊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崎脉。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖伯顶,靈堂內(nèi)的尸體忽然破棺而出囚灼,到底是詐尸還是另有隱情,我是刑警寧澤祭衩,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布灶体,位于F島的核電站,受9級特大地震影響掐暮,放射性物質(zhì)發(fā)生泄漏蝎抽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一路克、第九天 我趴在偏房一處隱蔽的房頂上張望樟结。 院中可真熱鬧,春花似錦精算、人聲如沸瓢宦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮履。三九已至,卻和暖如春廉嚼,著一層夾襖步出監(jiān)牢的瞬間玫镐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工怠噪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恐似,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓舰绘,卻偏偏與公主長得像蹂喻,于是被迫代替她去往敵國和親葱椭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容