Android啟動(dòng)優(yōu)化

一淘捡、背景

隨著App越做越大藕各,市場(chǎng),測(cè)試焦除、產(chǎn)品激况、開(kāi)發(fā)包括自己在內(nèi),明顯感覺(jué)到App的啟動(dòng)太慢膘魄、黑屏或在歡迎頁(yè)停太久乌逐,于是下定決心優(yōu)化下App的啟動(dòng)速度,查了些資料创葡,看了些別人的做法浙踢,總結(jié)出以下可取做法,現(xiàn)在分享給大家:

二灿渴、啟動(dòng)分析

1洛波、啟動(dòng)分類:

冷啟動(dòng):后臺(tái)不存在該應(yīng)用的任務(wù)進(jìn)程或服務(wù)呐芥,用戶點(diǎn)擊Icon圖標(biāo)啟動(dòng)

暖啟動(dòng):工作介于冷熱啟動(dòng)之間。幾種可能被認(rèn)為是溫啟動(dòng)的狀態(tài):

a奋岁、用戶離開(kāi)了app思瘟,然后重新啟動(dòng)它。這時(shí)進(jìn)程還在繼續(xù)運(yùn)行闻伶,但是Activity被回收了滨攻,app需要重新創(chuàng)建activity。

b蓝翰、系統(tǒng)將你的app回收了光绕,然后用戶重新啟動(dòng)app。進(jìn)程和Activity都需要重新啟動(dòng)畜份,但它們可以從onCreate方法保存的bundle中恢復(fù)诞帐。

熱啟動(dòng):當(dāng)后臺(tái)存在該應(yīng)用的進(jìn)程或者服務(wù)時(shí),用戶點(diǎn)擊icon圖標(biāo)啟動(dòng)爆雹。如用戶按了home鍵回到桌面停蕉,或者返回鍵沒(méi)有殺進(jìn)程,或者app本身做了進(jìn)程重啟的機(jī)制

2钙态、啟動(dòng)組成時(shí)間:

Application啟動(dòng)經(jīng)過(guò)attachBaseContext->onCreate方法

Activity啟動(dòng)經(jīng)過(guò)onCreate->onStart->onResume方法

經(jīng)過(guò)以上流程后慧起,界面才顯示出來(lái),所以啟動(dòng)耗時(shí)原因就可以在上述步驟中找出

3册倒、分析啟動(dòng)耗時(shí)原因:

a蚓挤、測(cè)量啟動(dòng)時(shí)間:在Androd的Log系統(tǒng)時(shí)通過(guò)ActivityManager與Display這兩個(gè)關(guān)鍵字可以查看到啟動(dòng)Activity所需要的時(shí)間,如果要看到數(shù)據(jù)加載的時(shí)間驻子,則可以在代碼中自定義灿意,在數(shù)據(jù)加載完的回調(diào)方法中主動(dòng)調(diào)用reportFullyDrawn()方法,則上報(bào)給系統(tǒng)崇呵,系統(tǒng)會(huì)反饋一個(gè)總的加載時(shí)間

b缤剧、計(jì)算啟動(dòng)時(shí)間——ADB

adb shell am start -W com.xys.preferencetest/.MainActivity

c、計(jì)算啟動(dòng)時(shí)間——Screen Record

adb shell screenrecord--bugreport /sdcard/test.mp4

d演熟、method tracing

通過(guò)上述方法基本上可以定位到耗時(shí)原因鞭执,那下面就開(kāi)始解決問(wèn)題

4司顿、在2中我們已經(jīng)知道了啟動(dòng)app要經(jīng)歷哪些過(guò)程芒粹,那我們會(huì)在這些過(guò)程做哪些事情呢?

在Application中:attachBaseContext方法中一般是加載MultiDex.install(this)操作大溜,關(guān)于這部分目前沒(méi)辦法優(yōu)化化漆,特別是在5.0以下的機(jī)器上,但是我們可以規(guī)避這問(wèn)題钦奋,歡迎頁(yè)我們可以另開(kāi)一進(jìn)程執(zhí)行(在manifest中加android:process)或者對(duì)App進(jìn)行插件化座云,onCreate方法中一般會(huì)初始化一些第三方平臺(tái)的SDK以及一些全局變量的初始化疙赠,我們可以執(zhí)行Application中的方法registerActivityLifecycleCallbacks,這個(gè)方法會(huì)監(jiān)聽(tīng)所有Activity的創(chuàng)建和銷毀朦拖, 我們可以在這里完成一些初始化工作

在Activity中:使用DelayLoader實(shí)現(xiàn)圃阳,getWindow().getDecorView().post(new Runnable(){

@Override

public void run({

//loading...

})

})

另外使用Theme改變用戶感知。

參考資料:

https://segmentfault.com/a/1190000007406875

http://www.lightskystreet.com/2016/10/15/android-optimize-start/

https://juejin.im/entry/582adaad570c35006cdcb615

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末璧帝,一起剝皮案震驚了整個(gè)濱河市捍岳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睬隶,老刑警劉巖锣夹,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異苏潜,居然都是意外死亡银萍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門恤左,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贴唇,“玉大人,你說(shuō)我怎么就攤上這事飞袋÷蓑穑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵授嘀,是天一觀的道長(zhǎng)物咳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蹄皱,這世上最難降的妖魔是什么览闰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮巷折,結(jié)果婚禮上压鉴,老公的妹妹穿的比我還像新娘。我一直安慰自己锻拘,他們只是感情好油吭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著署拟,像睡著了一般婉宰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上推穷,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天心包,我揣著相機(jī)與錄音,去河邊找鬼馒铃。 笑死蟹腾,一個(gè)胖子當(dāng)著我的面吹牛痕惋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娃殖,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼值戳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了炉爆?” 一聲冷哼從身側(cè)響起述寡,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叶洞,沒(méi)想到半個(gè)月后鲫凶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衩辟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年螟炫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺晴。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昼钻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出封寞,到底是詐尸還是另有隱情然评,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布狈究,位于F島的核電站碗淌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抖锥。R本人自食惡果不足惜亿眠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磅废。 院中可真熱鬧纳像,春花似錦、人聲如沸拯勉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宫峦。三九已至岔帽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斗遏,已是汗流浹背山卦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工鞋邑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诵次,地道東北人账蓉。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像逾一,于是被迫代替她去往敵國(guó)和親铸本。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評(píng)論 25 707
  • 1.什么是Activity?問(wèn)的不太多,說(shuō)點(diǎn)有深度的 四大組件之一,一般的,一個(gè)用戶交互界面對(duì)應(yīng)一個(gè)activit...
    JoonyLee閱讀 5,734評(píng)論 2 51
  • 【觸發(fā)背景】面對(duì)海量APP的今天陌宿,APP用戶量和活躍度成為評(píng)價(jià)一款A(yù)PP是否成功的重要因素锡足。用戶下載APP后,AP...
    siyu8023閱讀 10,322評(píng)論 1 14
  • 南方的姑娘北方漢子上帝先給我們指定了一個(gè)故鄉(xiāng)出生在南方的你我成長(zhǎng)在了北方我們都說(shuō)對(duì)方是異鄉(xiāng) 我們所在的地方是故鄉(xiāng)離...
    田裡和樹(shù)閱讀 228評(píng)論 0 2
  • 將當(dāng)前對(duì)時(shí)間顯示出來(lái)NSDate -> NSSTringNSDate *date = [NSDate date];...
    SlimMan閱讀 884評(píng)論 1 2