Android APP優化越來越被很多開發者重視,他們期望自己開發的應用,都能得到用戶的好評,關鍵就在於給用戶一個良好的體驗上。啓動優化的出現是因爲,很多APP在從桌面點開的時候,會出現白屏或黑屏,有的會出現點擊後,過很長時間纔出現應用的首頁。這些都會給應用帶來不好的體驗。
這方面的優化需要你對Android啓動有大致的瞭解。
系統啓動步驟
1 當 Android手機打開電源時,Android系統首先引導芯片代碼加載引導程序 BootLoader 到 RAM 中去執行。
2 然後 BootLoader 把操作系統拉起來。
3 Linux 內核啓動開始系統設置,找到一個 init.rc 文件啓動初始化進程。
4 init 進程初始化和啓動屬性服務,然後開啓 Zygote 孵化進程。
5 Zygote 開始創建 JVM 並註冊 JNI 方法,開啓 SystemServer。啓動 Binder 線程池和 SystemServiceManager,並啓動各種系統服務。
應用的啓動流程
Application從構造方法開始--> attachBaseContext()-->onCreate()--->Activity構造方法-->
onCreate()--->設置顯示界面佈局,設置主題,背景等屬性--->onStart()--->onResume()--->顯示裏面的View(測量,佈局,繪製,顯示到界面)
常見應用啓動方式:
1)冷啓動:當直接從桌面上直接啓動,同時後臺沒有該進程的緩存,這個時候系統就需要
重新創建一個新的進程並且分配各種資源。(較慢)
2) 熱啓動:該app後臺有該進程的緩存,這時候啓動的進程就屬於熱啓動。(較快)
時間的消耗:在MainActivity顯示之前,主線程所做動作時間的消耗,比如第三方SDK初始化,大量IO,網絡請求等;簡而言之
Application的初始化+ MainActivity的界面繪製。
如何測量應用的啓動時間:
使用命令行來啓動app,同時進行時間測量,如下:
adb shell am start -W [PackageName]/[PackageName.MainActivity]
通常情況下,由於MainActivity的業務和佈局複雜度非常高,該界面必須要有一些初始化的數據才能顯示這個時候MainActivity就可能半天都出不來,這就給用戶感覺app太卡了。
常見的優化方案如下:
方案1:
設置 windowbackgroud 爲透明的
<item name="android:windowIsTranslucent">true</item>
或者 單獨做成一個 AppTheme.Launcher
<style name="AppTheme.Launcher">
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@drawable/ic_launcher</item>
</style>
在清單文件中 啓動 Activity 加入該 主題
<activity
android:name="com.test.activity.LoginActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/AppTheme.Launcher"
android:windowSoftInputMode="adjustUnspecified|stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在啓動 Activity 頁面中加入
setTheme(R.style.AppTheme_Launcher);//在setContentView之前
3 懶加載
將第三方SDK的初始化,數據庫操作,網絡等操作放到IntentService 的onHandleIntent ()裏面去操作,或者開啓一個單獨的線程池來初始化。