Android 分析器是Android Studio 3.0 包含全新的性能分析工具包,以帮助调试应用的性能问题,这是对之前的 Android Monitor 工具集进行彻底重写,新的分析器可实时、统一的视图中访问应用的 CPU、内存和网络活动。每个性能事件映射到 UI 事件时间线中,该时间线突出显示触摸事件、按键和activity生命周期变更,以便更清楚地了解特定事件发生的时间和原因。 点击每个时间线,深入了解应用的性能情况。下面简单介绍三个分析器的作用。
CPU分析器:
CPU 分析器,可以通过触发一个样本或测试的 CPU 跟踪文件,分析应用的 CPU 线程使用情况。然后,开发者可以使用 CPU 分析器中内置的各种数据视图和过滤器排查 CPU 性能问题。主要包括以下几点:
1.监控当前timeline的cpu运行情况,可实时获得app占用cpu的情况以及thread的使用情况。
2.相比traceview,CPU分析器使用上更直观,更方便,尤其是对method tracer分析,并提供了四种分析视图。
3.运行时会起一些线程(JDWP, Profile Saver, Studio:VMStats, Studio:Perfa, and Studio:Heartbeat),因此有一部分性能开销,视图中会显示这些辅助线程的名称以便开发者区分。
4.分析卡顿,建议还是优先使用systrace。
5.下图展示了在一段时间内,new thead执行网络请求时的cpu活动,红圈中绿色小段表示执行了
内存分析器:
内存分析器将之前的堆查看器和分配跟踪器的功能集成到一个丰富的界面中,帮助调试应用中的内存使用问题。开发者可以通过分析内存分配、堆转储等来诊断各种内存问题
记录内存分配
相比原来的MAT,新的内存分析器增加了record memory allocation的功能,即捕捉时间区间内的内存分配:
1.期间分配的所有内存及大小
2.期间分配内存的call stack 以及thread
dump堆内存
dump堆内存后会展示出应用程序正在使用内存的对象。 具体可以查看以下内容:
1.应用中分配的对象类型及数量(alloc count)
2.每一个对象的内存大小,包括shallow size 以及 retained size
3.每一个对象的具体引用位置
4.对象的分配时机以及call stack,但这个功能只能在捕捉区间内存分配时可以使用
5.下图展示了测试activity中,存储同样key value的map 以及sparsearray的大小,可以明显看到,sparsearray比map更省内存
网络请求分析器:
1.监控应用的网络活动,检查每个网络请求的有效负载,
2.配合HttpURLConnection、OKHttp等网络库使用可以使用网络分析器的高级功能(抓包、call stack定位,见图)
3.对开发作用一般,QA可用于简单的网络活动监测
总结:
1.新的性能分析器使用起来比原来的要便捷,三种分析器的界面交互也很相似,应该会成为以后的主流性能分析工具了。
2.分析卡顿最好还是和systrace一起用,因为systrace工具分析时本身带来的性能开销更小,参考这篇:https://zhuanlan.zhihu.com/p/27331842
3.性能分析是个细活,而且要多实践才会有更多更深的体会。
参考链接:
1.https://developer.android.google.cn/studio/preview/features/android-profiler.html
2.https://developer.android.google.cn/studio/profile/memory-profiler.html#capture-heap-dump
3.https://developer.android.google.cn/studio/profile/cpu-profiler.html
4.https://developer.android.google.cn/studio/profile/network-profiler.html