0%

第7、8课-启动优化

启动优化<上>-第7讲

启动分析

着手优化之前,首先分析启动过程。

  1. 首先预览窗口,系统拉起App进程之前,会根据app的Theme属性创建预览窗口。当然,我们禁用预览窗口或者预览窗口为透明时,用户依然可以看到桌面。
  2. 进程和闪屏页创建完毕,可以看到广告图片界面
  3. 主窗口创建完成可以看到首页了
  4. 首页加载完,才能操作起来

启动遇到的问题

  • 点击图标很久都不响应。可能是禁用了预览窗口或者透明皮肤
  • 首页显示太慢。闪屏广告、其它准备工作都要在启动阶段完成,如果耗时太多就慢
  • 首页显示后无法操作。工作异步延后之后,首页就会出现白屏,或者首页出来无法操作

启动优化

优化工具:综合看来,在卡顿优化中提到的 “systrace + 函数插桩” 是比较理想的方案,而且还能看到一些关键事件:GC、SystemServer 、CPU 调度等

准确的评估之后,才能指引优化的方向

优化方式

  • 闪屏优化。今日头条把预览窗口与是县城闪屏效果,用户在很短时间内看到“预览闪屏”,不过这种实现对于低端机型会把总的闪屏时间拉长。所以比较推荐在 6.0及以上的版本才采用“预览闪屏”
  • 业务梳理。清楚启动过程中每一个运行的模块,哪些是一定需要的,哪些是可以砍掉,可以懒加载的。还有,懒加载要防止集中化,容易出现首页用户无法操作的情况
  • 线程优化。主要在于减少cpu调度带来的波动,让应用启动更加稳定。具体做法是,一方面控制县城的数量,要有线程池(我们是采用Rxjava,统一管理线程池);还有一个就是管理线程的锁,比如业务有先后顺序,或者优先级不同,这一点可以采用第三方启动框架来解决,比如阿里开源的Alpha微信内部使用的mmkernel

启动优化<下>-第8讲

启动进阶方法

启动过程不建议出现网络io

还有,就是数据结构选择问题,在启动时,只需要读写很少量的 sp文件,如果与很大的sp文件一起解析,这个解析时间可能就要超过 100ms了(可以说我们的application中的sp解析是花了很长时间的)。

黑科技

应用加固对启动速度来说是灾难

启动监控

  • 实验室监控,如果客观地反映启动耗时,视频录制是非常好的选择,尤其是我们拿不到竞品的数据(通过分析竞品,我们制定了秒开的标准,可以取平均值、最大值、最小值)
  • 线上监控。我们使用talkingdata来监测。(但是我们要注意监测的耗时),最终衡量指标呢,使用平均法容易忽略掉性能差的手机,可以使用快开慢开比:比如2秒快开比,5秒快开比;另一种就是 90% 用户启动时间,如果90%用户启动时间都小于5秒,那我们90%区间启动耗时就是5秒。
谢谢你的鼓励