張紹文android開(kāi)發(fā)高手課讀書(shū)筆記4-啟動(dòng)優(yōu)化篇

本系列博文 基于是前微信高級(jí)工程師張紹文專欄 《Android開(kāi)發(fā)高手課》的讀書(shū)筆記。

文章所寫(xiě)內(nèi)容是本人讀完的感悟,需要原文的朋友請(qǐng)自行購(gòu)買(mǎi)。

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

在說(shuō)如何對(duì)啟動(dòng)時(shí)間進(jìn)行優(yōu)化之前,我們得先知道從用戶點(diǎn)擊應(yīng)用圖標(biāo)開(kāi)始,一共經(jīng)歷了那些階段。

主要階段如下圖.

image

T0~T1階段

這個(gè)階段是手機(jī)系統(tǒng)解析點(diǎn)擊事件,效應(yīng)快慢跟手機(jī)性能有關(guān)

T1~T2階段

系統(tǒng)在正式啟動(dòng)應(yīng)用之前,會(huì)根據(jù)應(yīng)用設(shè)置的Theme設(shè)置一個(gè)預(yù)覽界面.

應(yīng)用啟動(dòng)白屏也是發(fā)生在這里,如果你沒(méi)有設(shè)置對(duì)應(yīng)的Theme,并且Activity的onCreate函數(shù)執(zhí)行所需要的時(shí)間過(guò)長(zhǎng),就會(huì)出現(xiàn)白屏的情況.比較可行的解決方式是給啟動(dòng)頁(yè)的Theme設(shè)置一張背景圖。如下

 <activity
     android:name=".view.SplashActivity"
     android:theme="@style/LauncherTheme">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
</activity>

<style name="LauncherTheme" parent="AppTheme">
   <item name="android:windowBackground">@drawable/logo_bg</item>
</style>

這樣的話,在點(diǎn)擊應(yīng)用圖標(biāo)后,就會(huì)先顯示一張背景圖,

另外還可以將預(yù)覽窗口指定為透明的,這樣用戶在看到閃屏頁(yè)之前會(huì)一直帶著桌面,但這樣就會(huì)給用戶一種點(diǎn)了很久才會(huì)看到界面的感覺(jué)。

在預(yù)覽界面顯示之后,便會(huì)創(chuàng)建Application和閃屏頁(yè),大部分應(yīng)用都會(huì)在這個(gè)時(shí)候初始化各種功能.因而導(dǎo)致

預(yù)覽界面~閃屏界面顯示 這個(gè)時(shí)間會(huì)很長(zhǎng).

如何優(yōu)化

除了必須要在Application中初始化的功能,我們可以把其他一些功能的初始化移到閃屏頁(yè)中,因?yàn)榇蠖鄶?shù)應(yīng)用的閃屏頁(yè)都會(huì)停留幾秒鐘。這里還要注意的是,移到閃屏頁(yè)初始化的功能代碼,不要放在onCreate生命周期下,而是另外開(kāi)啟一個(gè)線程來(lái)做初始化行為。

另外,多線程的切換會(huì)影響CPU的性能.所以如果你的應(yīng)用在啟動(dòng)時(shí)需要開(kāi)多個(gè)線程的話,需要考慮用線程池來(lái)維護(hù)

T2~T3階段

在閃屏頁(yè)顯示的時(shí)候,會(huì)開(kāi)始主頁(yè)視圖的繪制,這個(gè)時(shí)候需要注意,因?yàn)橹罢f(shuō)到,閃屏頁(yè)中會(huì)開(kāi)啟子線程去初始化一些功能。如果需要初始化的模塊過(guò)多,開(kāi)始加載首頁(yè)的時(shí)候還沒(méi)初始化完成,恰巧這個(gè)時(shí)候首頁(yè)又需要用到這個(gè)模塊.那這個(gè)時(shí)候就會(huì)報(bào)錯(cuò)。

所以首頁(yè)需要用到的模塊必須得在調(diào)用之前初始化成功。

T3~T4階段

首頁(yè)正常顯示了,但這個(gè)時(shí)候你不一定就能點(diǎn)擊,問(wèn)題還是在于有些功能模塊的代碼還未初始化完成。

總結(jié)

界面顯示上:

預(yù)覽窗口可以采用自由logo背景或者與閃屏頁(yè)共用,以防止白屏.

模塊初始化:

application中初始化一部分必要的模塊,閃屏頁(yè)通過(guò)子線程加載一部分模塊,剩下的非緊急的模塊用懶加載的方式,

其中懶加載要防止集中化,不然可能會(huì)出現(xiàn)一次加載太多,導(dǎo)致某個(gè)界面無(wú)法操作的情況。

張老師課中還涉及許多監(jiān)控和底層相關(guān)的東西,我個(gè)人接觸的較少,這里就不在贅述了。

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 應(yīng)用啟動(dòng)類型 冷啟動(dòng)場(chǎng)景:開(kāi)機(jī)后第一次啟動(dòng)應(yīng)用 或者 應(yīng)用被殺死后再次啟動(dòng)生命周期:Process.start->...
    please邊去閱讀 2,326評(píng)論 0 2
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,050評(píng)論 4 61
  • 《裕語(yǔ)言》速成開(kāi)發(fā)手冊(cè)3.0 官方用戶交流:iApp開(kāi)發(fā)交流(1) 239547050iApp開(kāi)發(fā)交流(2) 10...
    葉染柒丶閱讀 28,703評(píng)論 5 20
  • 大都市的夜晚,從來(lái)都不會(huì)因?yàn)楹诎刀察o下來(lái)。我懂你,只身一人,孤軍奮戰(zhàn)的事兒,你從來(lái)都沒(méi)有少做…… 有沒(méi)有那么一刻...
    鈴鈴鈴你行啊閱讀 358評(píng)論 0 1
  • 一直不屑于把時(shí)間浪費(fèi)在打掃上,我常常篤定地回答朋友或家人,有這時(shí)間,還不如有質(zhì)量地陪伴孩子。 這段...
    阿梅子家風(fēng)閱讀 340評(píng)論 0 0

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