首页 > 其他分享 >Android app的启动优化总结

Android app的启动优化总结

时间:2023-06-22 14:07:01浏览次数:50  
标签:trace 启动 方法 app 录制 profiler Perfetto Android 优化


工欲善其事必先利其器,最近在启动优化上踩了不少坑,写篇文章记录下,也给大伙避避坑,节省些时间。

启动优化是什么,完全可以顾名思义,本文就不赘述了。至于为什么要做性能优化–QAQ,大家dddd

问题场景

主要分为如下两种场景,笔者主要在第一种场景下进行实操哈

1、项目中已有性能启动相关埋点以及启动时间要求,在做需求的过程中导致启动性能达不到合并主干标准

2、项目代码一直从头撸到尾,没做过性能优化,突然需要进行专项优化

第一个场景的关键就在与一个字-比,比啥呢?当然是比启动时间。那么该怎么比呢?

想必大多数的项目都是在ApplicaitonattachBaseContext方法开始计时,然后在MainActivityonWindowFocusChanged方法结束计时,这之间的时间差就作为启动时间的数据依据。

现在时间差是有了,但是光知道启动慢了解决不了问题呀。所以就需要下面的工具来帮忙啦。

检测工具

1、Android Studio的Profiler

2、Perfetto

3、TraceView-官方已不推荐使用,改用perfetto吧

Android Studio的Profiler 使用方法-手把手教学录制Trace

As内置的工具,个人感觉这个是最好使的,虽然说在新版本的As上会有些bug,不过瑕不掩瑜哈,大多数情况都是靠这个工具解决的问题。 Profile有几种使用的姿势,我都一一讲解下

1、直接点击工具栏的profiler按钮

Android app的启动优化总结_android

该操作会让as重新build,然后给你装包之后自动启动profiler,不过也仅仅是启动了profiler,as没帮你开启trace,我们需要比对的就是trace。还需要一个进行一项设置才能在启动profiler的时候也开启trace。

Android app的启动优化总结_android studio_02

Android app的启动优化总结_android_03

按照上图设置好之后,ok让设置生效,然后点profiler的图标,as就会在启动profiler的时候也开启trace,你只需要在界面可见的时候点击stop record即可。

如此操作在基线包和功能最新包上跑出两个trace即可进行Trace对比了。

2、直接点击工具栏的profiler按钮-省去编包时间版

还是点profiler按钮,不过使用姿势不一样哈,跟第一个方法不一样的地方在于,该方法不需要跑一个Trace就编一个包,大项目编个包十分钟是很稀松平常的事情,按第一个方法的话,一早上跑三五个trace就顶天了。区别如下:

Android app的启动优化总结_ci_04

这次我们需要先编译出基线包跟分支包,然后用上图的方式分别打开两个apk,然后按照第一个方法的步骤edit configuration,设置启动app的同时开启trace record。

在提前备好基线包的情况下,随时都能跑个trace出来,不用重新编包了。美滋滋。不过最好还是按照下图的操作,留下trace文件,这样基线的trace就能重复使用了。

Android app的启动优化总结_ci_05

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呢? 详细介绍看这里

Android app的启动优化总结_ci_06

代码里面埋好代码之后,还是原来的配方-编出带有trace埋点的基线包以及分支包,运行,这次在运行后就能在指定目录拿到录制好的trace,接下来导入到as即可

Android app的启动优化总结_基线_07

经过上面的一顿操作,想必你已经学会如何用AS录制trace了吧。接下来就是开两个as,拿着两个trace对比来挤牙膏了,后面的这一步不属于工具篇的部分了,如果有小伙伴需要的话,再开新坑讲解下吧。

Perfetto 使用方法

这是谷歌新推出的工具,此工具的使用场景比较特殊,一般情况下用不到,不过要用到的时候是真的香(涉及锁,binder,cpu,io瓶颈方面的问题)。就是在使用的时候有挺多坑的。。不踩一踩坑压根就用不上。。

在Trace类型上,Perfetto适用于SystemTrace,不适用与methodTrace,虽然As也能进行SystemTrace的录制跟解析,不过功能没有Perfetto这么强大哈。

1、网页ui进行录制

Android app的启动优化总结_ide_08

该方法虽然看起来方便,而且有一堆设置可以选择,不过不知道是因为手机设备的问题,还是有bug,笔者愣是没成功,一点录制就报错。。遂放弃该方法。

2、命令行录制

直接参考官方文档吧 这个方法也是一堆奇奇怪怪的报错,录制个SystemTrace得踩一堆坑。属实太麻烦了,遂笔者在尝试了一波能成功录制了之后,还是放弃了使用该方法。

3、系统开发者选项的录制入口-究极推荐

官方文档

Android app的启动优化总结_android studio_09

虽然说类别选择上没有网页ui上多,不过妥妥的够用了好嘛。重点是简单方便。配置好一次类别之后,再给添加上控制中心的快捷入口,以后尽管点快捷入口录制即可。

总结下

不管是As的Profiler还是Perfetto,都选第三个推荐方法即可,简单粗暴还省时间,这么多录制Trace的姿势大家学废了吗。 还有些细节,由于篇幅有限,后面再开新坑写吧,写太长大家会看不下去的吧。哈哈

有啥不懂的,可以私聊下,问得多的部分再开新坑

作者:墨色漩涡

标签:trace,启动,方法,app,录制,profiler,Perfetto,Android,优化
From: https://blog.51cto.com/u_16163453/6534758

相关文章

  • 95后Android开发:“我现在是真想躺平...“
    我是真想躺平…说实话,我现在每天上班都很难受,我也不知道为啥反正就很丧,很想当一条咸鱼,就想躺着。最近疫情、裁员…坏消息很多,大环境不好,我本就打算今年换工作的,现在这环境就有点烦…其他行业可能不知道,程序员跳槽最佳的时间就是3-4月,或者9-10月,被称为金三银四和金九银十,但是今年这......
  • 【工程化】Android开发电脑中都装了哪些软件
    写在前面工欲善其事,必先利其器。作为一名Android开发者,在开始正式开发之前,给电脑安装各种开发相关软件是必不可少的。今天来罗列下我电脑中装的那些开发相关的软件,一来换新电脑时,可以方便根据应用清单安装软件,二来如果你是刚从事Android开发,也可以参考着安装这些软件,希望可以帮助到......
  • Framework有多重要?Android framework 深层解读
    前言时间已经到了六月份了,这段时间整理了一下自打当公司Android面试官以来的奇葩事情,这才发现这奇葩事可真是多,跟另外一个HR朋友聊天,他说前段时间面一个Android高级架构,最后和他差点干起来了…我问他为什么,面个试还这么惊险刺激,差点挨上一顿打,真被打了那算工伤,公司指定得给你报销药......
  • AndroidUI进阶-为什么不能在子线程更新UI
    为什么不能在子线程更新UIandroid.view.ViewRootImpl$CalledFromWrongThreadException:Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews.atandroid.view.ViewRootImpl.checkThread(ViewRootImpl.java:8798)atandroid.view.ViewR......
  • POSTGRESQL 短查询优化,独立索引与组合索引 8
    这是一个关于POSTGRESQL查询的优化系列,这已经是这个系列的第八集了,接上期,在OLTP查询中我们需要注意的查询优化的地方非常多,稍不留意就会在一些问题上的操作导致查询的数据逻辑错误。继续上次的问题,在查询中,针对事件的查询问题,我们一般处理的模式 1 针对具体事件字段的时间标注......
  • postgresql SQL 优化 -- 理论与原理
    这里写的是一个系列,关于POSTGRESQLSQL优化的问题,这篇是这个系列的第二篇,第一篇可以在文字的末尾的连接中找到,之前有同学提出,希望有一个历史文字的连接。这期就进入正题,一个SQL语句撰写出来是怎么开始工作的,也就是查询的过程queryprocessing ,这里从几个步骤入手1  一个SQL......
  • Postgresql SQL 优化 两个模型与数据存储
    这里写的是一个系列,这是系列的第三篇,这个系列主要是针对SQL优化,前两篇的地址下文字的最下方。接上次,上次提到了SQL优化的原理与理论,实际上SQL优化的原理是离不开两个模型与数据存储的, 整体SQL优化的核心也在于两个模型和数据存储。简化的说明这两个模型1 数据访问成本模型2 ......
  • POSTGRESQL SQL 优化,不建立索引,不调整参数,不修改SQL的另类方式
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,软件架构师,软件开发大佬,可以解决你的问题。在MYSQL中很少听说过自建统计信息,实际上在其他数据库中,创建统计信息的方式和需求都是有的,尤其处理复杂SQ......
  • 这应该是堪称教科书级别的“Android Framework学习笔记”了,字节九位大佬联合打造,首次
    相信大家在找工作的时候,肯定或多或少都被面试官问到过安卓的八股文。ActivityManagerService(简称AMS),或者WindowManagerService(WMS)怎么实现的啊,有些什么细节需要注意啊,View被加入到ViewRoot的流程啊等等。在我看来,对于应用开发来说,面试考这些纯粹就是扯淡,很有可能面试官自己也......
  • 为什么90%的Android开发都成不了年薪百万的架构师?
    身为技术人,相信你也思考过这个问题:工作了几年,代码写得非常熟练,上线的程序也少有bug,时不时还能搞个技术分享,但接下来要往哪个方向发展呢?想来无非是3种选择:专精技术、转型管理、晋升架构师。包括我自己在内的很多朋友,都选择了第三种,或正朝这个方向努力。但我发现,有些人做了7、8......