如何減少應用啓動時的耗時
針對冷啓動時候的一些耗時,可以採取以下策略:
1、在Application的構造器方法、attachBaseContext()、onCreate()方法中不要進行耗時操作的初始化,一些數據預取放在異步線程中,可以採取Callable實現。
2、對於sp的初始化,因爲sp的特性在初始化時候會對數據全部讀出來存在內存中,所以這個初始化放在主線程中不合適,反而會延遲應用的啓動速度,對於這個還是需要放在異步線程中處理。
3、對於MainActivity,由於在獲取到第一幀前,需要對contentView進行測量佈局繪製操作,儘量減少佈局的層次,考慮StubView的延遲加載策略,當然在onCreate、onStart、onResume方法中避免做耗時操作。
遵循上面三種策略可明顯提高app啓動速度。
優化應用啓動時的體驗
對於應用的啓動時間,只能是儘量的避免一些耗時的、非必要的操作在主線程中,這樣相對可以縮減一部分啓動的耗時,另外一方面在等待第一幀顯示的時間裏,可以加入一些配置以增加體驗,比如加入Activity的background,這個背景會在顯示第一幀前提前顯示在界面上。 對於應用的啓動時間,只能是儘量的避免一些耗時的、非必要的操作在主線程中,這樣相對可以縮減一部分啓動的耗時。
---------------------
消除啓動時的白屏/黑屏: https://www.jb51.net/article/91568.htm
在用戶點擊手機桌面APP的時候,看到的黑屏或者白屏其實是界面渲染前的第一幀,如果你看懂了文章頭的那2個問題,那麼解決這個問題就非常輕鬆了,無非就是將Theme裏的windowBackground
設置成我們想要讓用戶看到的畫面就可以了,這裏有2種做法:
1、將背景圖設置成我們APP的Logo圖,作爲APP啓動的引導,現在市面上大部分的APP也是這麼做的。
1 2 3 |
|
2、將背景顏色設置爲透明色,這樣當用戶點擊桌面APP圖片的時候,並不會"立即"進入APP,而且在桌面上停留一會,其實這時候APP已經是啓動的了,只是我們心機的把Theme裏的windowBackground
的顏色設置成透明的,強行把鍋甩給了手機應用廠商(手機反應太慢了啦,哈哈),其實現在微信也是這樣做的,不信你可以試試。
1 |
|
透明化這種做法需要注意的一點,如果直接把Theme引入Activity
,在運行的時候可能會出現如下異常:
1 |
|
這個是因爲使用了不兼容的Theme,例如我這裏的Activity
繼承了AppCompatActivity
,解決方案很簡單:
1、讓其Activity
集成Activity
而不要集成兼容性的AppCompatActivity
2、在onCreate()
方法裏的super.onCreate(savedInstanceState)
之前設置我們原來APP的Theme
1 2 3 4 5 6 7 |
|
上面的2種做法,我們都需要將Theme引入對應的Activity
1 2 3 4 5 6 7 8 9 |
|
三、關於啓動優化
上面的做法其實可以達到"秒開"APP的效果,不過確不是真實的速度,在Activity創建過程中其實是會經過一系列framework
層的操作,在日常開發中,我們都會去重寫Application
類,然後在Application
裏進行一些初始化操作,比如存放用戶標識的靜態化TOKEN
,第三方SDK的初始化等。
這裏給出幾點建議:
1、不要讓Application
參與業務的操作
2、不要在APPlication
進行耗時操作,比如有些開發者會在自己的APP裏一系列文件夾或文件(比如我自己),這些I/O操作應該放到"確實該使用的時候再去創建"亦或者是數據庫的一些操作。
3、不要以靜態變量的方式在Application
中保存數據等。
當然這是絕對的理想主義,把上面的"不要"2字之前添上"儘量"2字吧,畢竟在實際開發中,這樣做確實會讓我們方便許多。
對了,補充一點,佈局也是很重要的,儘量的去減少佈局的複雜性,佈局深度,因爲在View
繪製的過程中,測量也是很耗費性能的。
好了,以上就是Android冷啓動實現APP秒開的全部內容,希望這篇文章的內容對大家日常開發App能有所幫助,如果有疑問可以留言交流。
------------------------------------
https://www.jianshu.com/p/4f10c9a10ac9 Traceview檢測APP的啓動時間,用Service優化,解決啓動黑屏
---------------------
一個Android 應用真正啓動慢的原因是在Application 裏面做了耗時的操作。把這些耗時的操作找出來並且new Thread 放到異步線程裏面,那麼問題就解決了。
-------------------------------------