Android 性能优化

(一)Android 性能优化 Cpu Profiler

2020-06-26  本文已影响0人  科技猿人

小酌鸡汤

业精于勤,荒于嬉。

本文来源《Android 性能优化 全家桶》

为什么优化Cpu使用率?

 优化应用的 CPU 使用率能带来诸多好处,如提供更快、更顺畅的用户体验,以及延长设备电池续航时间。

性能低会引起哪些现象?

 常见的表现有启动时间久、界面切换慢、页面刷新掉帧、卡顿、耗电,还会引发应用无响应、程序崩溃的现象。

论工具的重要性

 当我们遇到性能瓶颈时,如何来定位性能问题?如果你还停留在肉眼判断、多次复现总结规律、二分法代码注释删除测试、增加log观察、debug断点…这个时候就需要定性和定量分析了…
 是可忍熟不可忍,大声的喊出:我需要工具、工具、工具…

为什么要用profiler?

 分析cpu性能的工具有很多,有traceview(profiler已经替代它了),profiler, systrace,以及perfetto(用来替代systrace)。不要急,后续都会系列文章中介绍…
 profiler在与应用交互时实时检查应用的cpu使用率和线程活动,也可以检查记录方法跟踪数据、函数跟踪数据和系统跟踪数据的详细信息。举个栗子,profiler可以查看某段时间某个线程执行了哪些方法,以及方法耗时和调用堆栈等信息。

现在,就一起实操体验profiler吧!

(1)profiler实操环境(可选项,用自己的环境和代码也一样)
(2)打开profiler
(3)来吧,一起预览一下吧:
profiler概览
(4)点击cpu分类栏,就可以进入到cpu profiler详情页:
cpu-profiler录制前概览
(5)录制一段cpu监听记录(在录制过程中,执行一些操作,在观察录制数据时,更好分析寻找切入点):
cpu-profiler录制中概览
(6)点击stop按钮,完成录制:
cpu-profiler录制完成概览
(6.1)解惑环节(只针对旧版用户)

 好了,到了这里,估计有些人就有些疑惑了,这跟我的录制结果不一样啊,最起码长相都变了…时间戳去哪儿了?Call chart去哪儿了?之前是垂直布局显示,现在怎么是整体左右分屏显示?why?
 莫急,莫急,请容我们慢慢缕,先喝一口82年的拉菲…
 第一个问题:为什么长相都变了,因为我用的是AndroidStudio 4.0的版本,如果大家喜欢新版风格,升级以下就行,如果不喜欢,用自己的就行,本质都一样。
 第二个问题:时间戳去哪儿了?其实时间戳还在,只是之前时绝对时间戳,现在变成了相对时间错,比如录了10秒钟,时间戳就是从0s -> 10s。
 第三个问题:Call chart呢?现在怎么是左右分屏显示?因为新版对分类标签页做了优化。在之前的版本中, 你是不是还为 call chart与 其他标签频繁切换而苦恼不已?你是不是在为录制时做了哪些操作而头疼不已?…下面的新版新特性为您解答。
 新版本新特性:
  1. 将之前的Event事件显示窗格,用Interaction窗格替代(对交互事件做了细分,查看起来直观方便方便)
  2. 将Call chart分析窗口与Threads窗口信息进行聚合处理,在具体的Threads窗口选则一个(比如main),双击进入,发现里面就是Call chart分析窗口,这样有个好处是,call chart可以与其他三个分析类别(TopDown/FlameChart/BottomUp)进行联动数据分析,这是我最喜欢的地方。

(7)录制完成分析环节:
(7.1)SamplePop示例代码:
cpu-profiler使用SamplePop代码展示
(7.2)Call Chart
cpu-profiler call chart分析图

 当未选择具体方法时,每个方法会是三种颜色中的一种:

(7.3)Flame Chart
cpu-profiler flame chart分析图

 一目了然的可以看出哪个方法的总耗时最长,然后既可以一步步尝试解决掉它(在SamplePop中,很显然是在循环中执行log打印,大量消耗了cpu)

(7.4)Top Down
cpu-profiler Top Down分析图

 有没有什么惊喜的发现,是不是和上面的flame chart一样,以下子就发现了log函数消耗此方法的49.5% cpu,只是 flame chart的图标形式更直观一些。

(7.5)Bottom Up
cpu-profiler Bottom Up分析图

 怎么样,是不是涛声依旧?而且从默认的排序就可以看出,哪个方法最消耗cpu。其实三个分类以不同的方式展示问题,各有优势,适当选择即可。

(7.6)极简模式

 上面分析呢,都是从一个简单的例子来讲述工具的使用,方便大家理解。只要掌握了基本的工具使用和分析方法,再经过项目的实际使用,相信大家就会游刃有余的解决各种问题。
 你是不是以为要结束了?其实并没有…

(8)在应用启动过程中记录 CPU 活动
(8.1)手永远没有机器快,要分析应用的启动过程,全靠它
cpu-profiler 在应用启动过程中记录 CPU 活动
(8.2)然后 Run -> Profiler 启动应用(当应用一启动,则启动了cpu数据跟踪记录)。下面是应用启动后的生成数据:
cpu-profiler 在应用启动过程中记录文件生成
(9)使用 Debug API 记录 CPU 活动
(9.1)当不满足于以上的定位和分析方式,你还想:
(9.2)然后通过adb命令将trace文件pull出来:
(9.3)Debug API 是不是很好用?不过还有以下一些点需要注意:

小编的扩展链接

参考链接

终于结束了,开心的笑吧

举手之劳,赞有余香! ❤ 比心 ❤

上一篇 下一篇

猜你喜欢

热点阅读