大厂Android启动优化- 5 防劣化规范流程

2021-10-25 10:36:19 浏览数 (1)

前面几章我们介绍了指标的定义,相关实践优化,取得了较好的成果,优化也趋近于瓶颈。在优化过程中我们也遇到了大量的问题,比如每个版本几百次的代码合入,导致优化的效果劣化,如何规范化流程,保障优化效果等是我们面临比较严峻的问题。 在大的团队,各种开发组错综复杂,推动问题成本高,防劣化我们更希望更前置的发现问题,避免代码合入后或者带入线上后才发现问题,再推动业务组去修复。

1 CodeReview

前面几章我们也讲到了启动框架,通过启动框架改造后,所有的启动任务管理都放置在一个module中,将module拆分出出来,作为一个单独的aar方式放置到主工程中,所有的开发修改启动库的代码都通过提交PR的方式,经过代码codeview的方式合入。 通过代码codeview的方式的话能发现明显的问题,但是对于一些比较隐蔽的问题我们就比较难发现,下面介绍几种出现问题比较大概率的一些情况监测。

2 自动化

在代码合入之前通过自动化测试,前置检测是否有问题。

1 线程和IO监测

由于我们是模块化开发,启动任务内调用的是一个接口,而实现是再对应的业务module里面,所以对于实现类的修改我们没办法敏感的发现,实现类内创建线程或者操作大IO等问题对启动的影响较为明显,基于这点,我们采用数据监控方式,通过数据对比设定卡口。 腾讯开源的工具也提供了多个监控方案 github.com/Tencent/mat… ,监测可以通过插装、hook等多种方式去处理。 我这里简单出来采用hook的方式去监控。github.com/tiann/epic , 比如线程的创建,我们可以通过线程hook Thread.start方法,IO的读取量我们监控FileStream相关的api去操作。 通过工具,我们记录启动过程中的线程创建和IO操作,设置基准的数据,在后续的问题分析中快速对比发现问题。

2 启动多阶段埋点

第一章中我们有介绍启动的几个阶段1 数据和架构设计,对启动的几个阶段进行数据埋点,在每次主工程代码合入的时候,自动化构建使用云真机跑启动用例,对比数据。

3 视频分帧

之前我们有介绍,通过自动化,启动录制视频,然后将视频分帧,通过算法筛选出点击帧和渲染完成帧。

遇到的问题

在自动化过程中我们遇到最大的问题是数据波动,数据波动无法保证结果的可靠性,导致信服力降低,数据消费意愿下降。 针对这类问题我们采用几个方案。

  • 对于实验室机型只做启动测试用例。
  • 每次保证测试环境是一致的。
  • 每次检测跑多次数据。

总结

至此,启动优化的系列文章已经介绍完成,主要包含几部分:架构设计、指标设计、实战优化,防劣化,掌握这几部分我觉得基本上已经OK了,脚踏实地的解决业务场景问题,对于非常黑科技的东西经常会华而不实。 对于优化我自己的心得就四个字:胆大心细,对于历史问题我们有胆魄去重构解决,在解决的过程我们要心思细腻,不要出现线上大故障,通过AB的手段逐渐发布。

最后如果有给你带来帮助,帮忙点个follow,后面应该还会继续带来其他系列实战过的优化文章。

0 人点赞