庐江魅力网做网站号码,wordpress h1 样式,搜索引擎 网站地图,广州最新消息AndroidApp应用性能优化总结
最近大半年的时间里#xff0c;大部分投在了某国内新能源汽车的某款AndroidApp开发上。 由于该App是该款车上#xff0c;常用重点应用。所以车厂对应用性能的要求比较高。 主要包括#xff1a;
应用冷启动达到***ms。应用热(温)启动达到***ms应…AndroidApp应用性能优化总结
最近大半年的时间里大部分投在了某国内新能源汽车的某款AndroidApp开发上。 由于该App是该款车上常用重点应用。所以车厂对应用性能的要求比较高。 主要包括
应用冷启动达到***ms。应用热(温)启动达到***ms应用内画面切换响应达到**ms应用内动效/动画/车模等交互时画面不能有延迟感等等。应用不能有内存泄露内存稳定在**MB 诸如上面的内容还有一些就不详细列出来了。
因为之前没有直接做过AndroidApp开发之前大部分时间在做Framework/System开发。所以对于应用的性能优化相当于站在系统角度重新研究了一遍。
经历大半年时间后曾经作为系统侧不理解应用开发人员的某些东西突然理解了。也更加觉得如果在应用开发前能有一个好的整体架构设计那很多事会半功倍。
这里总结一下Android应用总结时用到的一些方法。
启动性能优化
冷启动和温启动
Android应用启动主要指启动App到其显示出第一帧的时间。大类上可以分为冷启动、热启动两种细分的话还有一种叫温启动两种方式主要区别在于 App的进程是否已被加载。 简单理解 冷启动 Android系统Fork进程加载App资源然后Activity被启动走Activity的生命周期(onCreate、onStart、onResume)等等。 热启动: AndroidApp的进程已经存在App资源已经加载完成。在这个前提下启动App的时间App画面显示。
利用Trace加以分析
trace常用来分析启动的优化可以利用AndroidStudio自带的Profile工具。也可以使用类似如下命令
# 抓取10S Trace并保存在 /data/misc/perfetto-traces/trace_file.perfetto-trace文件中。
adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 10s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memoryAnroid应用执行期间比如启动比如画面切换的动作、每步消耗时间会被记录到Trace中。然后利用AndroidStudio自带的工具或者perfetto网站分析Trace。 如下图通过perfetto网站分析的Trace内容。
分析Trace中主要耗时点针对主要耗时点一般可以考虑如下优化方向
资源比如图片加载时间是否过长资源是否可以压缩。布局类型是否合理布局内容中是否可以写死某些内容避免动态计算布局中的资源是否可以用时加载用于优化启动速度布局嵌套是否过多是否可以利用多核特性比如把操作分散到其他线程中并行处理是否存在重复操作父类中是否存在多余的操作是否利用了缓存机制让某些对象比如View不会反复重新创建Log日志输出是否合理是否过于频繁
如果系统提供的Trace不足可以在应用代码中加入自定义Trace. Trace.beginSection(TAG)Trace.endSection();通过仔细分析Trace可以对应用性能做很大的提升。
利用Log分析
这里的Log指应用自身的 Log以及Android系统的Log。 应用自身的 Log主要包括
Activity生命周期的Log与外部交互的Log比如外部接口是否耗时的分析。加载某些比较大资源的log。
Android系统Log主要包括
性能Logevents分区的log 。通过logcat -b events 输出。性能Log中会记录Activity每一个阶段的耗时。WMS、AMS、IMS的log抓取windowmanageservice和ActivitymanagerService的logInputManagerservice的log用来帮助分析应用系统。
其他优化手段
在通过Trace和Log分析应用后对于某些无法直接优化其响应速度的内容可以考虑
提前加载或初始化放入Application中提前加载对于热温启动方式有效。异步加载对于异步加载的情况下有些时候需要使用 占位图。占位图比如加载某个动效时动效无法立刻显示。那么使用将动效第一帧做成一个静态图提前显示。当动效加载完成并显示后再隐藏占位图。加入动画效果比如加入淡入、淡出的效果单纯从视觉上优化。
内存优化
内存优化主要包括
应用运行时内存是否超过标准过大应用运行时内存是否存在泄露情况
内存优化时可以考虑几个方面
缩减App包的大小。因为App本身资源少了内存自然少。考虑代码中是否存在不用的对象是否可以用简单对象比如不用Hashmap之类。当然考虑的时候也要考虑运行速度。利用内存分析工具分析内存是否泄露。
比如shark-cli利用该工具可以分析App是否存在内存泄露。
shark-cli -p 包名上面的命令输出如下结果
.....HEAP ANALYSIS RESULT3 APPLICATION LEAKSReferences underlined with ~~~ are likely causes.
Learn more at https://squ.re/leaks.177 bytes retained by leaking objects
Displaying only 1 leak trace out of 3 with the same signature
....稳定性优化
稳定性主要是指App的健壮性。不会异常崩溃不会闪白或者闪黑。 稳定性主要靠对应用进行测试比如测试人员比如自动化工具等等。 工具的话monkey是比较常见的工具可以通过monkey模拟用户的随机操作。关于该用法网络上有很多说明。
Android应用的性能优化方法不仅限于本文介绍的这些还有很多优化的方法。总的来说的话其实就是让应用不做多余的事情、使用恰当的资源、提前加载以及充分利用并行。