android性能优化之启动优化

如何查看启动时间:

adb shell am start -S -W com.example.app/.MainActivity// -S 先停止目标应用,再启动
ThisTime : 最后一个 Activity 的启动耗时(例如从 LaunchActivity - >MainActivity「adb命令输入的Activity」 , 只统计 MainActivity 的启动耗时)
TotalTime : 启动一连串的 Activity 总耗时.(有几个Activity 就统计几个)
WaitTime : 应用进程的创建过程 + TotalTime .
如果需要统计从点击桌面图标到 Activity 启动完毕,可以用WaitTime作为标准,但是系统的启动时间优化不了,所以优化冷启动我们只要在意 ThisTime 即可

1、利用提前展示出来的Window,快速展示出来一个界面,给用户快速反馈的体验;
2、避免在启动时做密集沉重的初始化(Heavy app initialization);/3、定位问题:避免I/O操作、反序列化、网络操作、布局嵌套等。
3、启动加速之主题切换(使用Activity的windowBackground主题属性来为启动的Activity提供一个简单的drawable。)
项目修改:

  1. 数据库及IO操作都移到工作线程,并且设置线程优先级为THREAD_PRIORITY_BACKGROUND,这样工作线程最多能获取到10%的时间片,优先保证主线程执行。
  2. 流程梳理,延后执行;
    实际上,这一步对项目启动加速最有效果。通过流程梳理发现部分流程调用时机偏早、失误等,例如:

更新等操作无需在首屏尚未展示就调用,造成资源竞争;
调用了IOS为了规避审核而做的开关,造成网络请求密集;
自有统计在Application的调用里创建数量固定为5的线程池,造成资源竞争,在上图traceview功能说明图中最后一行可以看到编号12执行5次,耗时排名前列;此处线程池的创建是必要但可以延后的。
修改广告闪屏逻辑为下次生效。
4、去掉无用但被执行的老代码;
5、去掉开发阶段使用但线上被执行的代码;
6、去掉重复逻辑执行代码;
7、去掉调用三方SDK里或者Demo里的多余代码;
8、信息缓存,常用信息只在第一次获取,之后从缓存中取;
项目是多进程架构,只在主进程执行Application的onCreate();

参考文献

1.https://developer.android.google.cn/topic/performance/vitals/launch-time
2.https://blog.csdn.net/qian520ao/article/details/81908505
3.https://www.jianshu.com/p/f5514b1a826c

你可能感兴趣的:(android性能优化之启动优化)