前言
性能优化过程分为两部分:
发现性能瓶颈
开发解决性能问题的方案
性能问题的解决方案需要具体分析,没有完全固定的路径,更多的是靠经验的积累,本文不涉及。但是有一种固定的方法可以找到性能瓶颈。本文主要介绍如何发现性能瓶颈。
如何发现性能瓶颈
Traceview是一个常用的性能测试工具,集成在Android设备监控器中。从Android Studio3.0开始,Android设备监视器被放弃,取而代之的是Android Profiler,它提供三个功能:内存Prodiler、CPU Profiler和网络Prodiler。
MAT或LeakCanary常用于内存优化(包括内存泄漏),Memory Profiler相当于将MAT的简化功能集成到AS中。另一方面,在性能优化方面,CPU Profiler相当于将traceview的功能集成到AS中。
所以,如果使用AS3.0之前的版本,可以使用traceview,而如果使用AS3.0之后的版本,除了traceview,还可以选择CPU Profiler。
如果想跟踪系统进程的详细数据,解决帧引起的接口干扰,可以使用systrace,本文不涉及。
Traceview用法
要使用traceview,您需要首先插入调试类。当应用程序执行插入的代码时,它会自动在手机sd卡中生成一个. trace文件,然后使用traceview或as(3.0以上版本)打开该文件。
一、插桩
插接需要使用Debug类,并且会生成。因此您必须首先确保您的应用程序具有WRITE_EXTERNAL_STORAGE的权限。
在要跟踪的代码逻辑的开头和结尾插入标记:
//使用您提供的名称开始记录跟踪日志。例如
//下面的代码告诉系统开始将. trace文件记录到
//名为“sample.trace”的设备。
Debug.startMethodTracing("示例");
...
//系统开始缓冲生成的跟踪数据,直到您的
//应用程序调用stopMethodTracing(),并在此时写入
//将缓冲的数据输出到输出文件。
debug . StopMethodTracking();
生成的`。trace ` file会保存在一个固定的目录下,和` getExternalFilesDir()'返回的目录一样,就是`/ sdcard/Android/data/[your _ package _ name]/files下`。
请注意,如果您的应用程序在不更改跟踪日志名称的情况下再次调用startMethodTracing(),它将覆盖保存到设备的现有日志。如果希望每次运行时都保存到不同的日志文件,可以使用以下代码:
//使用简单日期格式类创建一个字符串
//当前日期和时间。
简单日期格式日期=
新建SimpleDateformat(" DD _ MM _ yyyy _ hh _ MM _ ss ");
字符串logDate = Date . format(new Date());
//将日期和时间应用于跟踪日志的名称。
Debug.startMethodTracing(
“sample-”+logDate);
如果系统在您调用stopMethodTracing()之前达到最大缓冲值,它将停止跟踪并向管理中心发送通知。启动和停止跟踪的函数在整个应用程序过程中都是有效的。也就是说,您可以在活动的创建(捆绑)中创建
函数调用startMethodTracing(),活动调用onDestroy()函数中的stopMethodTracing()。
第二,检查。跟踪文件
插入桩后,安装应用程序,运行被检测部分的功能,然后就可以通过AS或traceview查看文件了。
使用AS查看
在AS中点击查看-工具窗口-安卓文件浏览器,打开安卓文件浏览器:
生成的。跟踪文件可以在/sdcard/Android/data/[your _ package _ name]/files下找到,双击文件可以打开。
保存。将跟踪文件拖到计算机上,直接将其拖到自动化系统窗口中,或者直接打开视图。
在打开的视图中,您可以在左上角选择要查看的线程。您可以看到指定的线程运行了多长时间,执行了哪些方法,每个方法执行了多长时间,等等。
有四个名词需要解释:
-挂钟时间(Wall Clock Time):挂钟时间,表示实际经过的时间,即从进入一个方法到退出该方法的时间,而不管线程是活动的还是休眠的。
-线程时间:线程时间,表示实际经过的时间减去线程没有消耗CPU资源(休眠)的时间。对于任何给定的函数,其线程时间总是小于或等于其挂钟时间。使用线程时间可以让您更好地了解给定函数消耗了多少线程的实际CPU使用量。
-Inclusive Time:方法执行自己的代码的时间+执行自己的子方法的时间。
-Exclusive Time:方法执行其自身代码的时间。
使用跟踪视图查看
若要使用traceview查看,您需要保存。首先跟踪文件到您的计算机:
ADB pull/sdcard/Android/data/[YOUR _ PACKAGE _ NAME]/files . trace D:document sample . trace
打开“安卓设备监视器”。在AS3.0之前,是LogCat所在的窗口,切换标签页就可以了。在AS3.0之后,输入“android-sdk/tools/”路径并运行以下命令:
监控
虽然安卓设备监控的DDMS也有文件浏览器,但是没有root的手机无法查看上面的路径,所以只能保存。跟踪文件到计算机进行查看。
在安卓设备监视器中,依次点击文件-打开文件,并选择。打开它的跟踪文件路径:
内容和AS打开时差不多,主要区别是图标部分,没有AS的Call Chart的视觉形象。
还有四个概念:
Cpu时间:相当于AS中的线程时间。
实时:相当于AS中的挂钟时间。
包含时间:与相同。
独占时间:与相同。
使用自动化或跟踪视图查看
这是见仁见智。根据我个人经验,建议用AS来查。原因有二:
AS比较简单。不需要单独打开ADM,也不需要保存。跟踪文件到计算机。
AS的Call Chart更直观,cpu时间消耗一目了然。
调用图的横轴表示函数调用(或调用者)的时间段和时间,纵轴显示其被调用者。下图显示了一个调用图的例子,并描述了给定函数的自身时间、子时间和总时间的概念。
最后,需要注意的是,在跟踪和分析过程中,应用程序的运行速度会变慢。因此,traceview得到的分析数据并不能准确反映一个方法实际执行的绝对时间。关于这一点,在最后的笔记里做详细的分析。
Google还提供基于样本的分析,以减少分析对运行时性能的影响。若要启用样本分析,请调用Debug.startMethodTracing采样()方法,而不是调试方法。startmethodtracing()方法。在调用stopMethodTracing()之前,会定期收集样本。
中央处理器剖析器的使用
用CPU Profiler跟踪函数比traceview简单。不需要做任何代码植入。这里简单介绍一下:
首先,通过
查看-工具Windows-Android Profiler打开Android Profiler。手机连接电脑后运行应用,在Android Profiler中会看到如下视图:
您可以在左上角选择设备和进程,然后单击中央处理器区域进入中央处理器概述视图:
您可以在左上角选择跟踪模式:
采样:以默认采样率捕获应用程序的调用堆栈。这种模式的内在问题是,如果应用程序在一次捕获后进入一个函数,并在下一次捕获前退出该函数,分析器将不会记录该函数调用。如果您对这种短暂的跟踪函数感兴趣,您可以使用“仪表化”跟踪。
仪表化:在每个函数调用的开始和结束记录时间戳。分析和比较时间戳以生成函数跟踪数据。需要注意的是,设置与函数相关的开销会影响运行时性能甚至分析数据,尤其是对于生命周期相对较短的函数。此外,如果应用程序在短时间内执行大量功能,分析器可能会很快超过其文件大小限制,并且无法记录更多的跟踪数据。
1.《trace Android - 性能优化》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《trace Android - 性能优化》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1047951.html