您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
apply update from adb(爱奇艺Android客户端启动优化与分析)
时间,线程,初始化apply update from adb(爱奇艺Android客户端启动优化与分析)
发布时间:2020-12-06加入收藏来源:互联网点击:
I 成果:通过对执行时间较久,执行频率的业务进行优化,将CPU占有率维持在合理的程度,会大幅减少启动时间,减少300ms以上。
5.4 系统API使用
部分系统的API使用是阻塞性的,文件很小可能无法感知,当文件过大,或者使用频繁时,可能造成阻塞。例如:
SharedPreference.Editor提交操作:commit方法属于属于阻塞性质API,建议使用apply。此外,我们知道,SP文件的存储是一个XML文件,以key-value形式存储,当业务过多时,需要拆分为多个文件存储,防止文件过大,出现读取耗时及ANR。进一步优化,可对启动阶段,频繁的SP操作在内存中,统一提交。AssetManager.open操作: Android开发中,我们有时会将资源文件放在assets目录中,然后使用open操作读取文件,如果文件过大,需要在异步线程中执行。I 成果:随着业务量日积月累,正常的系统API的使用,也可能出现问题,通过排除,可减少50-100ms。
5.5 精简布局
布局的复杂程度,直接影响绘制的时间。
举个例子,在启动过程中,会有需要大的背景图,只有第一次安装时使用,后续属性设置为android:visibility="gone",但是,虽然设置了gone属性,不会显示,但依旧会被解析。
建议:
减少布局层次无用资源使用ViewStub,使用时加载I 成果:启动阶段的布局较简单,通过优化背景图片的加载,减少50-100ms。
5.6 Service延后初始化
App启动中过程中,经常进行Service初始化操作,由于Service使用一般不涉及界面,可能会认为初始化生命周期不在主线程中,其实不然,在3.2的启动过程源码介绍中讲到,Service的生命周期,也属于主线程Handler接收的Message之一。
建议:Service生命周期中,注意逻辑执行时间性能优化,初始化尽量延后。
I 成果:取决于初始化Service的生命周期执行时间,可减少200ms以上。
5.7 将任务delay至首页绘制完成后
对于APP首页展示不需要的初始化逻辑,可延后至首页绘制完成后初始化。
注意:
需要post两次才能保证在第一次绘制之后显示,因为,系统绘制会执行两次Performtraversal。进一步优化:可将业务逻辑的初始化划分为,首页绘制后,5s,10s,20s三个阶段分别初始化,防止首页绘制执行任务过多造成掉帧。
I 成果:释放绘制阶段的CPU,可将复杂的绘制提前200ms以上。
6 监控
稳定的用户体验依赖于持续的监控,爱奇艺为监控启动性能建立了一套监控体系,测试,工具,开发等几个团队从不同的纬度搭建不同的监控方案
1.测试:录屏,从用户的真实体验角度,获取最准确的启动时间。2.实时监控:通过埋点,大数据采样投递获取真实线上环境数据,从地域,时间,机型,app版本,系统版本等各个纬度对启动时间进行监控。3.脚本测试:通过对脚本,对同一收集多次启动数据进行收集,通过不同版本间的对比,监控启动时间的变化情况。7 SysTrace扩展
SysTrace通过TAG节点可以清晰展现,启动过程以及方法执行时间,但是,从发现问题,然后通过节点去定位问题,是一件很繁琐的工作,如果你们工程编译又比较慢,简直让人崩溃。
7.1 自动化TAG注入
在Android工程编译的过程中,指定class,在方法前后,自动化插入Trace节点,统计方法执行时间。
流程:
1.在编译的过程中,插入自定义Task任务,2.读取配置文件,文件中包含了需要注入java文件名和路径名和method3.找到需要注入的class文件,然后通过ASM改变字节码,方法前后,插入自定义自定义方法通过工具的操作,能够做到不用修改原有工程文件,自动在打包时注入TAG节点和逻辑代码,配置文件可以循环利用,提高分析效率,节能环保。
8 优化结果
启动时间,由于不同的机型性能同,Android系统版本不同,同一APP版本启动时间,相差很大,所以统计一般以同一手机,不同版本做比较,尽量保证手机状态一致。
SysTrace手机优化时间对比:
脚本多次启动时间收集对比:
经过多个版本的持续优化,有无广告两种不同的场景下,启动时间分别减少40%和35%,启动速度得到了较大的提升。
9 总结
启动时间的优化和监控,是一项长期的任务,需要对异常的情况进行分析,对可能造成阻塞的代码逻辑进行合理的优化,非常感谢各个业务团队支持和配合。
以上就是全部启动时间优化相关的内容,谢谢大家能够阅读到这里,如果有更好的建议,欢迎交流!
有需要Gradle、RxJava、小程序、Hybrid、移动架构、NDK、React Native、性能优化等技术教程的可以关注我,私信回复"教程"免费获取!!
本文到此结束,希望对大家有所帮助呢。
上一篇:b5纸多大尺寸(2021年杭州市学生用品、劳保用品抽检信息)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |