美文网首页其他
Android启动优化

Android启动优化

作者: Alsan_L3 | 来源:发表于2017-03-14 10:19 被阅读0次

    一、背景

    随着App越做越大,市场,测试、产品、开发包括自己在内,明显感觉到App的启动太慢、黑屏或在欢迎页停太久,于是下定决心优化下App的启动速度,查了些资料,看了些别人的做法,总结出以下可取做法,现在分享给大家:

    二、启动分析

    1、启动分类:

    冷启动:后台不存在该应用的任务进程或服务,用户点击Icon图标启动

    暖启动:工作介于冷热启动之间。几种可能被认为是温启动的状态:

    a、用户离开了app,然后重新启动它。这时进程还在继续运行,但是Activity被回收了,app需要重新创建activity。

    b、系统将你的app回收了,然后用户重新启动app。进程和Activity都需要重新启动,但它们可以从onCreate方法保存的bundle中恢复。

    热启动:当后台存在该应用的进程或者服务时,用户点击icon图标启动。如用户按了home键回到桌面,或者返回键没有杀进程,或者app本身做了进程重启的机制

    2、启动组成时间:

    Application启动经过attachBaseContext->onCreate方法

    Activity启动经过onCreate->onStart->onResume方法

    经过以上流程后,界面才显示出来,所以启动耗时原因就可以在上述步骤中找出

    3、分析启动耗时原因:

    a、测量启动时间:在Androd的Log系统时通过ActivityManager与Display这两个关键字可以查看到启动Activity所需要的时间,如果要看到数据加载的时间,则可以在代码中自定义,在数据加载完的回调方法中主动调用reportFullyDrawn()方法,则上报给系统,系统会反馈一个总的加载时间

    b、计算启动时间——ADB

    adb shell am start -W com.xys.preferencetest/.MainActivity

    c、计算启动时间——Screen Record

    adb shell screenrecord--bugreport /sdcard/test.mp4

    d、method tracing

    通过上述方法基本上可以定位到耗时原因,那下面就开始解决问题

    4、在2中我们已经知道了启动app要经历哪些过程,那我们会在这些过程做哪些事情呢?

    在Application中:attachBaseContext方法中一般是加载MultiDex.install(this)操作,关于这部分目前没办法优化,特别是在5.0以下的机器上,但是我们可以规避这问题,欢迎页我们可以另开一进程执行(在manifest中加android:process)或者对App进行插件化,onCreate方法中一般会初始化一些第三方平台的SDK以及一些全局变量的初始化,我们可以执行Application中的方法registerActivityLifecycleCallbacks,这个方法会监听所有Activity的创建和销毁, 我们可以在这里完成一些初始化工作

    在Activity中:使用DelayLoader实现,getWindow().getDecorView().post(new Runnable(){

    @Override

    public void run({

    //loading...

    })

    })

    另外使用Theme改变用户感知。

    参考资料:

    https://segmentfault.com/a/1190000007406875

    http://www.lightskystreet.com/2016/10/15/android-optimize-start/

    https://juejin.im/entry/582adaad570c35006cdcb615

    相关文章

      网友评论

        本文标题:Android启动优化

        本文链接:https://www.haomeiwen.com/subject/jkmcnttx.html