冷启动优化笔记

1.首先需要衡量冷启动时间的指标,才能看到优化的效果。

可以在Application的构造函数,或者 attachBaseContext,写一个Trace.begin(Tag),然后在第一个Activity的onWindowFocusChanged 加入一个Trace.end消息,然后就可以用systrace方便的看到启动的耗时,当然你也可以用自己打log算时间的方式来完成。

2.如何优化

1.使用工具

可以用systrace + 函数插桩,就是上面提到的Trace,
它还可以看到系统的一些关键事件,例如 GC、System Server、CPU 调度等。通过插桩,我们可以看到应用主线程和其他线程的函数调用流程,还可以辅助用Traceview (Profiler),看函数耗时,就是这个工具本身太过于耗损性能。
运用工具来找到耗时的操作 、性能瓶颈,进行有针对性的优化,这样效果会更加显著一些。

2.优化工作

1.闪屏页面的windowbackground可以设置成启动图,防止黑白屏出现,秒开app。
2.业务梳理优化
启动过程中,哪些是必须的、哪些是可以懒加载的,哪些是可以异步的,都需要一个一个梳理,一些第三方框架,初始化会有线程池、反射、反序列化等操作的是会影响主线程的加载的,可以放在工作线程中异步来加载这些,然后降低工作线程的优先级,保证主线程的优先执行。
3.I/O 优化
启动过程读了什么文件、多少个字节、Buffer 是多大、使用了多长时间、在什么线程等一系列信息,比如:SharedPreference 会读入内存,
4.类重排、资源文件重排
Dex 文件用的到的类和安装包 APK 里面各种资源文件一般都比较小,但是读取非常频繁。我们可以利用系统这个机制将它们按照读取顺序重新排列,减少真实的磁盘 I/O 次数。
Facebook :“资源热图”相对比较完善,也建设了一些配套的Dashboard 工具,希望后续可以开源出来。支付宝:https://mp.weixin.qq.com/s/79tAFx6zi3JRG-ewoapIVQ

你可能感兴趣的:(冷启动优化笔记)