Android性能分析工具的使用

最近下来了一个比较棘手的任务,优化项目的启动速度!我们解决问题的第一步,首先就是找到问题,我们需要借助分析工具的帮助。熟练使用分析工具准确定位问题的关键,下面来介绍一下android代码的分析工具。

常用的Android代码分析工具:

1、Android profiler

2、TraceView

 

Android Profiler

工具:Android Studio 3.0+

Android Studio 3.0 采用全新的 **Android Profiler ** 窗口取代 Android Monitor 工具。 这些全新的分析工具能够提供关于应用 CPU、内存和网络 Activity 的实时数据。 您可以执行基于样本的函数跟踪来记录代码执行时间、采集堆转储数据、查看内存分配,以及查看网络传输文件的详情。

要打开 Android Profiler 窗口,请按以下步骤操作:

  1. 点击 View > Tool Windows > Android Profiler(也可以点击工具栏中的 Android Profiler )。
  2. 选择你需要分析的应用启动后,Android studio底部会出现Android Profiler窗口,如下图

    Android性能分析工具的使用_第1张图片

Android Profiler 目前可显示共享时间线视图,其中包括带有 CPU、内存和网络使用信息实时图表的时间线。 分析器窗口还包含时间线缩放控件 3、实时更新跳转按钮 4,以及显示 Activity 状态、用户输入 Event 和屏幕旋转 Event 的 Event 时间线5。

当您启动 Android Profiler 后,它会持续收集分析数据,直至您断开设备连接或点击 Close

但并不是所有分析数据均默认可见。 如果您看到一条消息,显示“Advanced profiling is unavailable for the selected process”,则需在运行配置中启用高级分析 。

分析模块对应的分析内容为:

  •  CPU :检查 CPU Activity 和函数跟踪
  •  Memory :检查 Java 堆和内存分配
  •  Network :检查网络流量

注:对于原生代码,不可使用高级分析功能。 如果您的应用是纯原生应用(不含 Java Activity 类),则不可使用高级分析功能。 如果您的应用使用了 JNI,则可使用部分高级分析功能,例如 Event 时间线、GC Event、Java 分配对象和基于 Java 的网络 Activity,但不能检测基于原生的分配和网络 Activity。

分析CPU使用情况:

1、标记分析开始位置,点击下图红点开始记录。再次点击,标记结束位置。

Android性能分析工具的使用_第2张图片

建议记录的时间不要过长,否者会记录不完整,或者出现卡死机的现象。如果非要这样做,可以修改配置参数,方法如下:

Android性能分析工具的使用_第3张图片

Android性能分析工具的使用_第4张图片

2、分析结果

Android性能分析工具的使用_第5张图片

  • 绿色: 表示线程处于活动状态或准备使用 CPU 即,它正在运行中或处于可运行状态。
  • 黄色: 表示线程处于活动状态,但它正在等待一个 I/O 操作(如磁盘或网络 I/O),然后才能完成它的工作。
  • 灰色: 表示线程正在休眠且没有消耗任何 CPU 时间。 当线程需要访问尚不可用的资源时偶尔会发生这种情况。 线程进入自主休眠或内核将此线程置于休眠状态,直到所需的资源可用。

Android性能分析工具的使用_第6张图片

最喜欢他的Call Chart视图,非常直观,可以知道方法的调用情况。

使用Top Down视图可以知道具体方法所使用的具体时间。如上图onCreate()方法里调用了start(),init(),GetIns()等方法。这些方法所对应的时间为

方法名                    方法自身耗时(Self)            方法里面的子方法耗时(Children)                  方法总耗时(Total)

onCreate                    523,532微秒                                    10,166,559微秒                                        10,690,091微秒

由此,我们可以知道哪个函数最为耗时,可以定位该函数并对其分析优化。

 

Android Device Monitor

以前用过eclipse开发Android的开发工程师都知道,在Google还没有推出Android Studio之前,我们都是用的Android Device Monitor工具来进行分析。虽然Google推出了这个Android Profiler蛮好用的,但是实际使用中会发现有几个不尽人意的地方:

1、无法使用代码来准确设置开始和结束记录标记位置

2、无法查看方法的递归次数

如果想解决上面这两个问题,可以通过另外的分析工具——Android Device Monitor

Android Studio 3.1中只能通过打开android-sdk/tools/nonitor的方式来打开工具页面。

打开工具:Tools->Android->Android Device Monitor

Android性能分析工具的使用_第7张图片

使用步骤:

生成.trace分析文件

  • 工具生成
  • 代码生成

 

工具生成.trace文件

(无须精确开始、结束record的位置)标志开始记录位置

Android性能分析工具的使用_第8张图片

标志结束记录位置

Android性能分析工具的使用_第9张图片

停止记录后,工具会自动打开trace文件

 

使用代码生成日志分析

代码标记开始、结束记录位置,生成.trace文件。

Debug.startMethodTracing("trace_file_name");//开始记录
//todo 需要分析的代码块
...
Debug.stopMethodTracing();//结束记录

生成的.trace日志文件路径:

/sdcard/trace_file_name.trace

获取生成的.trace文件:

adb pull /sdcard/trace_file_name.trace

打开trace文件:

  1. Start Android Device Monitor.
  2. In the Android Device Monitor, select File > Open File.
  3. Navigate to the .trace file you want to inspect.
  4. Click Open.

使用.trace文件进行性能分析

 

Android性能分析工具的使用_第10张图片

表头的意思是:

名称    意义
Name    方法的详细信息,包括包名和参数信息
Incl Cpu Time    Cpu执行该方法该方法及其子方法所花费的时间
Incl Cpu Time %    Cpu执行该方法该方法及其子方法所花费占Cpu总执行时间的百分比
Excl Cpu Time    Cpu执行该方法所话费的时间
Excl Cpu Time %    Cpu执行该方法所话费的时间占Cpu总时间的百分比
Incl Real Time    该方法及其子方法执行所话费的实际时间,从执行该方法到结束一共花了多少时间
Incl Real Time %    上述时间占总的运行时间的百分比
Excl Real Time %    该方法自身的实际允许时间
Excl Real Time    上述时间占总的允许时间的百分比
Calls+Recur    调用次数+递归次数,只在方法中显示,在子展开后的父类和子类方法这一栏被下面的数据代替
Calls/Total    调用次数和总次数的占比
Cpu Time/Call    Cpu执行时间和调用次数的百分比,代表该函数消耗cpu的平均时间
Real Time/Call    实际时间于调用次数的百分比,该表该函数平均执行时间
 

因为Calls+Recur是Android Profiler中没有提及到的,所以这里重点讲一下:

Android性能分析工具的使用_第11张图片

假设有一个递归方法reduceNum(),外部被调用1次,内部递归100次!方法如下:

Android性能分析工具的使用_第12张图片

 

具官方文档说,Android Device Monitor 在Android Studio 3.1中已弃用,已从Android Studio 3.2中删除。 所有功能都可以使用Android Profiler来代替。

 

 

 

 

参考:

https://developer.android.google.cn/studio/profile/android-profiler

https://developer.android.google.cn/studio/profile/monitor?hl=en

https://blog.csdn.net/itfootball/article/details/48792435 

 

 

你可能感兴趣的:(Android开发)