優化Android 應用啟動速度(應用啟動慢的真正原因探究)
阿新 • • 發佈:2019-01-23
開門見山告訴答案:
一個Android 應用真正啟動慢的原因是在Application 裡面做了耗時的操作。把這些耗時的操作找出來並且new Thread 放到非同步執行緒裡面,那麼問題就解決了。
下面看我的優化過程,這是我在未優化之前的Application的onCreate() 方法裡面做的事情:
@Override public void onCreate() { mUPushHelper = new UPushHelper(this); mUPushHelper.init(); if (AppHelper.isAppMainProcess(this)) { super.onCreate(); Log.v("tag_2","1"); SDKInitializer.initialize(app); Log.v("tag_2","2"); QbSdk.initX5Environment(app, null); Log.v("tag_2","3"); TuSdk.enableDebugLog(!IS_OFFICIAL); TuSdk.init(app, "1faa2d433fef2f60-03-glpcq1"); Log.v("tag_2","4"); MobclickAgent.setDebugMode(!IS_OFFICIAL); Log.v("tag_2","5"); } }
看上面,我把每個方法執行的間隔時間都給打印出來了。如下圖所示:
每個方法的耗時一目瞭然。1和2之間耗時270毫秒,3和4之間耗時330毫秒。4和5之間耗時340毫秒。
於是我把這些方法放到一個執行緒裡面去執行,如下所示:
@Override public void onCreate() { mUPushHelper = new UPushHelper(this); mUPushHelper.init(); if (AppHelper.isAppMainProcess(this)) { super.onCreate();// //耗時操作,一定要放到非同步執行緒裡 new Thread() { @Override public void run() { Looper.prepare(); SDKInitializer.initialize(app); QbSdk.initX5Environment(app, null); TuSdk.enableDebugLog(!IS_OFFICIAL); TuSdk.init(app, "1faa2d433fef2f60-03-glpcq1"); Looper.loop(); } }.start(); MobclickAgent.setDebugMode(!IS_OFFICIAL); } }
注意看上面的Looper.prepare() 和 Looper.loop() ,有些方法的執行需要在一個有Looper的執行緒才不會報錯,所以我就給這個執行緒一個Looper。
我做了這一步優化之後,日誌顯示啟動時間減少了270毫秒+330毫秒= 600毫秒。
執行OK ,啟動速度明顯提示。
========================
如果你覺得作者的這篇文章幫助到了你,請打賞作者一口飯吃: