android系统性能优化工具,Android性能优化工具篇

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

Android 提供了一些工具来帮助我们寻找优化点。

开发者选项

调试GPU过度绘制(Debug GPU Overdraw),可将绘制次数可视化,开发者可轻易发现过度绘制的区域。

gpu-overdraw.png

GPU呈现模式分析(Profile GPU Rendering),将界面绘制时间通过条形图的形式展现出来。每一个长条柱表示一帧的绘制,长条柱由不同的颜色区域组成,每一个颜色代表了在这一帧绘制中的一个阶段。比如:draw 阶段,包含了onDraw() 等方法的执行时间。

Input Handling 阶段,包含了处理事件(比如触摸事件)的时间。

颜色区域越长,表示该阶段消耗的时间越长。

profile-gpu-rendering-graph.png

工具提供的信息界面View树的层次结构,可用于定位冗余的层次结构。

观察同一棵子View树下的View的相对绘制速率,可用于定位绘制效率低的View。

主要用于观察App 中方法的执行。使用方法是,生成报告文件,然后用DDMS打开报告文件进行分析。生成报告的方式有两种:使用DDMS 直接生成指定时间内的所有方法调用的trace文件,可能因信息量过大而难以分析。

在代码中指定trace的范围,运行App 使执行此段代码,生成trace文件。1

2

3

4

5

6Debug.startMethodTracing(Environment.getExternalStorageDirectory() + File.separator + "traceFileName.trace");

try {

} finally {

Debug.stopMethodTracing();

}

工具提供的信息各个线程在指定时间内调用的方法。GC线程尤其值得留意。

traceview-timeline-pane.png

方法的执行时间、调用者、方法中调用的方法等。

traceview-profile-pane.png

跟TraceView差不多,也是生成报告文件(html文件,用chrome打开)进行分析。不同的是TraceView 提供的是指定App 的方法执行信息,而systrace 是从系统层面出发,提供了比如帧绘制、事件方面的信息。

注:官方教程中提到的使用方法,在命令行调用SDK 中的systrace.py 脚本生成报告文件会执行失败。只能在Android Device Monitor 中使用。

由于报告中包含的信息过多,systrace 允许我们在代码中添加标签,方便定位问题。与TraceView 中指定生成报告的范围不同,此方法只是在报告中添加标签,以便辨识。1

2

3

4

5

6Trace.beginSection("Trace Label");

try {

} finally {

Trace.endSection();

}

工具提供的信息通过小圆圈展示了每一帧的绘制情况,黄色和红色表示这一帧的绘制时间超过16 ms。

systrace-frame-unselected.png

点击小圆圈,可以在面板看到更多信息,包括绘制这一帧时所执行的方法,甚至优化建议。

systrace-frame-selected.png

内存分析工具

Memory Monitor

可以观察内存在时间线上的实时变动,已用内存的分配与释放,内存的大小等。当已用内存频繁抖动时,可得知发生了频繁的GC。

Heap Viewer

DDMS 的功能,可以查看各种类型的数据所占用内存空间。每次GC发生后会更新Heap。可用于定位内存泄露。

Allocation Tracker

可查看内存分配的时间,以及产生分配内存行为的方法。可用于定位内存泄露。

Tips:Android Device Monitor 里的用不了。Android Studio 3.0以下有集成,3.0及以上被去除。

Battery Historian

可用来观察电量的消耗情况。此工具无法直接提供各个App或任务消耗电量的信息,而是提供了以下信息:各个App或任务执行的时长、频率等。

设备在特定时段内消耗的电量。

battery-historian-timeline.png

Android Profiler!!!

Android Studio 3.0 开始提供了强大的Android Profiler。此工具提供了CPU 执行、内存、网络请求三方面的信息。

CPU执行分析

使用要点

观察方法的执行时长。

执行时间类型self:方法自身所占的时间,不包括所调用的方法的执行时间。

children:方法中调用其他方法所占的时间。

total:方法的总执行时间,等于self + children。

执行时间统计方式

通过不同的统计方式,我们可以观察(多次)执行一个方法的真正影响面。

统计方法在每次调用中的执行时长

Call Chart:展示指定时间内的所有调用栈。可用于观察一个方法每次调用的执行时长。

统计在相同调用链下方法的总执行时长

整合指定时间段内相同的调用链。可用于观察一个方法在指定时间段内,特定调用链下的总执行时长。举例,三次发生了A->B的调用链,可观察到三次调用的总执行时长。Frame Chart:以图表的形式展示。

Top Down:以调用链的形式展示。

统计方法的总执行时长

Bottom Up:整合指定时间段内相同方法的调用。可用于观察一个方法在指定时间段内所有被调用的总执行时长。

内存分析

在不同系统上的使用方式Android 8.0以下需要手动录制内存分配If your device is running Android 7.1 or lower, click Record memory allocations

profiler-record.png in the Memory Profiler toolbar. While recording, Android Monitor tracks all allocations that occur in your app. When you’re done, click Stop recording

profiler-record-stop.png (the same button; see video 2) to view the allocations.

Android 8.0开始On Android 8.0 and higher, advanced profiling is always enabled for debuggable apps.If your device is running Android 8.0 or higher, you can view your object allocations at any time as follows: Just click-and-hold in the timeline and drag to select the region where you want to view the allocations

功能观察内存分配在时间线上的变化(分配与GC)。

观察不同的内存类型及其大小。

观察产生分配内存行为的调用栈。

观察对象的引用者。

使用要点观察内存变化,看是否发生了内存抖动,即是否频繁GC。常见原因:在循环中创建对象。拼接字符串也会创建对象。

在View.onDraw()等方法中创建对象。

在内存使用后Dump Heap 来观察是否被正常释放。常见场景:关闭Activity后,Activity是否被正常释放。

图片不需要的时候,是否被正常释放。

对于未正常释放的内存(往往比较大才会被发现),通过追踪分配的调用栈以及持有者,来解决泄露问题。

网络请求分析

可用来观察App 的网络请求。

工具提供的信息网络请求的发起、执行时长。

观察发起网络请求的线程、调用栈,以及请求的详细信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值