Android性能優化(一):APP啓動優化
App啓動的方式有三種:
- 冷啓動:App沒有啓動過或App進程被killed, 系統中不存在該App進程, 此時啓動App即爲冷啓動。
- 熱啓動:熱啓動意味着你的App進程只是處於後臺, 系統只是將其從後臺帶到前臺, 展示給用戶。
- 介於冷啓動和熱啓動之間, 一般來說在以下兩種情況下發生:
(1)用戶back退出了App, 然後又啓動, App進程可能還在運行,但是activity需要重建。
(2)用戶退出App後, 系統可能由於內存原因將App殺死, 進程和activity都需要重啓,但是可以在onCreate中將被動殺死鎖保存的狀態(saved instance state)恢復。
這裏主要針對冷啓動進行優化。
一、先來看看冷啓動的流程:
- Zygote進程中fork創建一個新的進程。
- 先創建和初始化Application類。
- 創建和初始化Launch Activity(onCreate onMesure onLayout,ondraw)。
- 調用setContetView方法後,將view添加到DecorView中,調用view的measuer/layotu/draw顯示到界面上。
二、冷啓動優化:
優化之前先說如何查看應用啓動時間,方便進行對比:
-
第一種方法:手機連接電腦,打開Android Studio,查看Logcat打印出來信息,篩選關鍵字Displayed就可以看到應用啓動時間。如下圖:
-
第二種方法:使用adb shell命令來啓動應用並查看啓動時間
adb shell am start -W [packageName]/[packageName.launchActivity]
如下圖:
優化方法: -
針對Application的,不要在Application中進行業務操作和耗時操作,不要以靜態變量的方式在Application中保存數據。
-
針對Launch Activity,不要在Activity的onCreate方法進行耗時操作,如有必要則在線程中操作或者延時加載。
-
針對Launch Activity的View的繪製,減少Activity佈局view的層級,最好不要超過4層,減少View測量繪製的時間。
推薦使用下面這種延時加載,在窗口完成以後進行加載,這裏面的run方法是在onResume之後運行的。
getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
//TODO something
}
});