优化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 ,启动速度明显提示。

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

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


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值