讀書筆記4-啓動優化篇

本系列博文 基因而前微信高級工程師張紹文專欄 《Android開發高手課》的讀書筆記。java

文章所寫內容是本人讀完的感悟,須要原文的朋友請自行購買。android

啓動優化篇

在說如何對啓動時間進行優化以前,咱們得先知道 從用戶點擊應用圖標開始,一共經歷了那些階段。微信

主要階段以下圖.多線程

T0~T1階段

這個階段是手機系統解析點擊事件,效應快慢跟手機性能有關app

T1~T2階段

系統在正式啓動應用以前,會根據應用設置的Theme設置一個預覽界面.函數

應用啓動白屏也是發生在這裏,若是你沒有設置對應的Theme,而且Activity的onCreate函數執行所須要的時間過長,就會出現白屏的狀況.比較可行的解決方式是給啓動頁的Theme設置一張背景圖。以下性能

<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>
複製代碼

這樣的話,在點擊應用圖標後,就會先顯示一張背景圖,優化

另外還能夠將預覽窗口指定爲透明的,這樣用戶在看到閃屏頁以前會一直帶着桌面,但這樣就會給用戶一種點了好久纔會看到界面的感受。spa

在預覽界面顯示以後,便會建立Application和閃屏頁,大部分應用都會在這個時候初始化各類功能.於是致使線程

預覽界面~閃屏界面顯示 這個時間會很長.

如何優化

除了必需要在Application中初始化的功能,咱們能夠把其餘一些功能的初始化移到閃屏頁中,由於大多數應用的閃屏頁都會停留幾秒鐘。這裏還要注意的是,移到閃屏頁初始化的功能代碼,不要放在onCreate生命週期下,而是另外開啓一個線程來作初始化行爲。

另外,多線程的切換會影響CPU的性能.因此若是你的應用在啓動時須要開多個線程的話,須要考慮用線程池來維護

T2~T3階段

在閃屏頁顯示的時候,會開始主頁視圖的繪製,這個時候須要注意,由於以前說到,閃屏頁中會開啓子線程去初始化一些功能。若是須要初始化的模塊過多,開始加載首頁的時候還沒初始化完成,恰巧這個時候首頁又須要用到這個模塊.那這個時候就會報錯。

因此首頁須要用到的模塊必須得在調用以前初始化成功。

T3~T4階段

首頁正常顯示了,但這個時候你不必定就能點擊,問題仍是在於有些功能模塊的代碼還未初始化完成。

總結

界面顯示上:

預覽窗口能夠採用自由logo背景或者與閃屏頁共用,以防止白屏.

模塊初始化:

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

其中懶加載要防止集中化,否則可能會出現一次加載太多,致使某個界面沒法操做的狀況。

張老師課中還涉及許多監控和底層相關的東西,我我的接觸的較少,這裏就不在贅述了。

相關文章
相關標籤/搜索