优化Android 应用启动速度(应用启动慢的真正原因探究)

时间:2024-05-23 16:04:53

开门见山告诉答案:

一个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");
    }
}


看上面,我把每个方法执行的间隔时间都给打印出来了。如下图所示:
优化Android 应用启动速度(应用启动慢的真正原因探究)

每个方法的耗时一目了然。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 ,启动速度明显提示。

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

如果你觉得作者的这篇文章帮助到了你,请打赏作者一口饭吃:

优化Android 应用启动速度(应用启动慢的真正原因探究)