1. 程式人生 > >優化Android 應用啟動速度(應用啟動慢的真正原因探究)

優化Android 應用啟動速度(應用啟動慢的真正原因探究)

開門見山告訴答案:

一個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 ,啟動速度明顯提示。

========================

如果你覺得作者的這篇文章幫助到了你,請打賞作者一口飯吃: