Android性能分析之TraceView分析

平时开发中特别是列表界面中我们很容易就会发现如果在getView方法中处理了很多操作会带来卡顿现象,这时候我们想优化该从何入手呢?我们想知道一个函数到底被调用了几次,一个方法到底执行完毕需要耗时多久呢?带着这些疑问Google查资料带来了TraceView分析。

TraceView启动

其实呢,TraceView有两种启动方式。第一,可以在代码里面添加

android.os.Debug.startMethodTracing(

以及

android.os.Debug.stopMethodTracing()

添加玩上面代码后就会在sdcard目录下生产一个trace文件,这种方式我是不太喜欢因为比较繁琐,但是这种方式确能更精确。第二种,DDMS启动,进入DDMS选中对应的要调试的应用进程然后点击Start Method Profiling按钮在弹出的对话框中点击确定后在需要调试的界面执行操作,当然操作最好不要超过5s小范围性能优化效果会更佳。

这里写图片描述

TraceView界面

在经过上面操作之后就会弹出traceview生成界面,我们可以看下如下的效果。

这里写图片描述

上半部分代表的是当前进程中运行的线程,我们可以看出又main主线程、uil-pool-2-thread1这个图片下载进程等等。下半部分代表的是执行的函数以及一些性能指标。

TraceView分析

可以看出下半部分每个函数都有一个编号,我们随便选中一个函数点击打开可以看出里面有parent、children分别代表的是调用的父方法以及父方法调用的子方法,其实这个还是比较容易理解。

这里写图片描述

当然以上这些分析肯定不能代表什么,因为根本不知道这些能为你的性能优化带来什么解决办法。所以我们就需要分析下半部分的xxxTime横轴的指标。

这里写图片描述

首先我们需要看下toplevel这一项:

这里写图片描述

toplevel代表的是总得消化时间,也就是说在你点击Start Method Profiling按钮以及到生产taceview文件过程中调用的总次数、调用的总时间,明白这一点之后我们可以分析下横线上的指标了。

1.Incl Cpu Time
代表了这个函数执行一遍需要的时长百分比和具体时长值,比如说toplevel总的时长是1000ms,incl cpu time占比是10%也就是说这个函数执行总的时长是1000 * 10%。

2.Excl Cpu Time
可以理解为额外的时间消耗,因为CPU可能需要等待、阻塞等原因导致停止了多少时间,所以说这个函数具体执行时间是Incl Cpu Time减去Excl Cpu Time。

3.Incl Real Time、Excl Real Time
我是把他理解为函数真正的执行时间、时间占比以及额外的时间消化和消化占比。

4.Calls + Recur Calls / Total
其中calls代表这个函数被调用的次数,Recur Calls代表递归调用次数,Total代表的是总的调用次数。然后我们可以看到有的children调用的次数比parent的次数多,我们就可以判断出在parent中有多次调用children的方法从而我们可以判断是否可以省去从而去调性能。

5.Cpu Time / Call
除了上面那个查看调用次数外,这个指标其实更重要,因为这个指标代表了每次执行这个函数所消耗的时间值。比方说,Incl Cpu Time为1000ms然后调用次数为10那么他们的值就为100ms。通过这个时间我们就能知道是不是因为这个函数执行的时间过长,然后再次优化。

6.Real Time / Call
跟第三点分析类似,CPU可能额外等待、阻塞等原因,从而值跟Cpu Time/Call的值有差距。

最后,在我们读懂了这些性能指标之后,可是那么多方法总不能每个方法都去分析,所以我们分析的时候当然只分析跟我们app开发里面涉及的方法做分析,从而找出性能缺陷来实现修复性能问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android平台提供了许多性能分析工具,用于帮助开发者识别和解决应用程序性能问题。以下是一些常用的Android性能分析工具: 1. Android Profiler:Android Studio提供的内置工具,可用于监视应用程序的CPU、内存、网络和电池使用情况。它可以显示实时数据和时间序列图,并允许开发者分析应用程序的性能瓶颈。 2. Traceview 和 Systrace:这两个工具用于分析应用程序的方法调用和系统事件。Traceview提供了一个可视化的方法调用图,可以帮助开发者找到影响性能的瓶颈。Systrace则提供了更全面的系统级性能分析,包括CPU、内存、绘制和I/O等方面的信息。 3. Memory Profiler:Android Studio中的Memory Profiler工具可以监视应用程序的内存使用情况,并帮助开发者找出内存泄漏和不必要的内存分配。它提供了堆转储和内存分配跟踪功能,以及实时内存使用图表。 4. Network Profiler:Android Studio的Network Profiler工具可以帮助开发者分析应用程序的网络使用情况。它提供了实时网络传输监视和数据传输分析功能,包括请求和响应的详细信息、传输时间和数据大小等。 5. Battery Historian:Battery Historian是一个用于分析应用程序电池使用情况的工具。它可以通过分析系统日志和电池状态数据,帮助开发者找出应用程序中导致电池消耗过高的原因。 除了以上提到的工具,还有其他一些第三方的性能分析工具,如LeakCanary用于检测内存泄漏、MAT(Memory Analyzer Tool)用于分析Java堆转储文件等。开发者可以根据自己的需求选择适合的工具进行Android性能分析

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值