Android app的启动优化总结
Posted 嘴巴吃糖了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android app的启动优化总结相关的知识,希望对你有一定的参考价值。
工欲善其事必先利其器,最近在启动优化上踩了不少坑,写篇文章记录下,也给大伙避避坑,节省些时间。
启动优化是什么,完全可以顾名思义,本文就不赘述了。至于为什么要做性能优化–QAQ,大家dddd
问题场景
主要分为如下两种场景,笔者主要在第一种场景下进行实操哈
1、项目中已有性能启动相关埋点以及启动时间要求,在做需求的过程中导致启动性能达不到合并主干标准
2、项目代码一直从头撸到尾,没做过性能优化,突然需要进行专项优化
第一个场景的关键就在与一个字-比,比啥呢?当然是比启动时间。那么该怎么比呢?
想必大多数的项目都是在Applicaiton
的attachBaseContext
方法开始计时,然后在MainActivity
的onWindowFocusChanged
方法结束计时,这之间的时间差就作为启动时间的数据依据。
现在时间差是有了,但是光知道启动慢了解决不了问题呀。所以就需要下面的工具来帮忙啦。
检测工具
1、android Studio的Profiler
2、Perfetto
3、TraceView-官方已不推荐使用,改用perfetto吧
Android Studio的Profiler 使用方法-手把手教学录制Trace
As内置的工具,个人感觉这个是最好使的,虽然说在新版本的As上会有些bug,不过瑕不掩瑜哈,大多数情况都是靠这个工具解决的问题。 Profile有几种使用的姿势,我都一一讲解下
1、直接点击工具栏的profiler按钮
该操作会让as重新build,然后给你装包之后自动启动profiler,不过也仅仅是启动了profiler,as没帮你开启trace,我们需要比对的就是trace。还需要一个进行一项设置才能在启动profiler的时候也开启trace。
按照上图设置好之后,ok让设置生效,然后点profiler的图标,as就会在启动profiler的时候也开启trace,你只需要在界面可见的时候点击stop record即可。
如此操作在基线包和功能最新包上跑出两个trace即可进行Trace对比了。
2、直接点击工具栏的profiler按钮-省去编包时间版
还是点profiler按钮,不过使用姿势不一样哈,跟第一个方法不一样的地方在于,该方法不需要跑一个Trace就编一个包,大项目编个包十分钟是很稀松平常的事情,按第一个方法的话,一早上跑三五个trace就顶天了。区别如下:
这次我们需要先编译出基线包跟分支包,然后用上图的方式分别打开两个apk,然后按照第一个方法的步骤edit configuration,设置启动app的同时开启trace record。
在提前备好基线包的情况下,随时都能跑个trace出来,不用重新编包了。美滋滋。不过最好还是按照下图的操作,留下trace文件,这样基线的trace就能重复使用了。
3、代码打点录制trace-究极推荐
上面的方法1,2临时用用也还行,不过问题在于结束的时间点会由于手动的缘故,trace文件的录制时长波动较大,后续trace比对的时候,还需要手动拖动范围进行校准。在明确是进行启动性能优化的目的情况下,极其推荐使用该方法进行trace的录制。
Applicaiton的attachBaseContext方法开始计时的位置执行1,然后在MainActivity的onWindowFocusChanged方法结束计时执行2
1
Debug.startMethodTracingSampling(path, 5 * 16 * 1024 * 1024, 200)
2
Debug.stopMethodTracing()
方法一的参数path是trace的文件名,建议用时间命名,第二个参数是trace的文件大小,第三个参数是采样时间,这里为什么使用startMethodTracingSampling而不是startMethodTracing呢? 详细介绍看这里
代码里面埋好代码之后,还是原来的配方-编出带有trace埋点的基线包以及分支包,运行,这次在运行后就能在指定目录拿到录制好的trace,接下来导入到as即可
经过上面的一顿操作,想必你已经学会如何用AS录制trace了吧。接下来就是开两个as,拿着两个trace对比来挤牙膏了,后面的这一步不属于工具篇的部分了,如果有小伙伴需要的话,再开新坑讲解下吧。
Perfetto 使用方法
这是谷歌新推出的工具,此工具的使用场景比较特殊,一般情况下用不到,不过要用到的时候是真的香(涉及锁,binder,cpu,io瓶颈方面的问题)。就是在使用的时候有挺多坑的。。不踩一踩坑压根就用不上。。
在Trace类型上,Perfetto适用于SystemTrace,不适用与methodTrace,虽然As也能进行SystemTrace的录制跟解析,不过功能没有Perfetto这么强大哈。
1、网页ui进行录制
该方法虽然看起来方便,而且有一堆设置可以选择,不过不知道是因为手机设备的问题,还是有bug,笔者愣是没成功,一点录制就报错。。遂放弃该方法。
2、命令行录制
直接参考官方文档吧 这个方法也是一堆奇奇怪怪的报错,录制个SystemTrace得踩一堆坑。属实太麻烦了,遂笔者在尝试了一波能成功录制了之后,还是放弃了使用该方法。
3、系统开发者选项的录制入口-究极推荐
虽然说类别选择上没有网页ui上多,不过妥妥的够用了好嘛。重点是简单方便。配置好一次类别之后,再给添加上控制中心的快捷入口,以后尽管点快捷入口录制即可。
总结下
不管是As的Profiler还是Perfetto,都选第三个推荐方法即可,简单粗暴还省时间,这么多录制Trace的姿势大家学废了吗。 还有些细节,由于篇幅有限,后面再开新坑写吧,写太长大家会看不下去的吧。哈哈
有啥不懂的,可以私聊下,问得多的部分再开新坑
作者:墨色漩涡
链接:https://juejin.cn/post/7115710746876444703
更多Android相关学习笔记和视频资料等可扫描下方二维码免费领取👇
以上是关于Android app的启动优化总结的主要内容,如果未能解决你的问题,请参考以下文章