当前位置:   article > 正文

Android Systrace 使用方法,深入解析android核心组件和应用框架

android systrace

systrace对于检查应用程序的UI性能特别有用,因为它可以分析您的代码和帧速率以识别问题区域并提供可能的解决方案。 开始,按照以下步骤进行:

  1. 连接手机并运行您的app
  2. 使用以下命令运行systrace: python systrace.py view --time = 10
  3. 操作您的应用 10秒后,systrace生成一个HTML报告。
  4. 使用网络浏览器打开HTML报告。

您现在可以与报告进行交互,以便在记录期间检查设备CPU使用情况。 以下部分介绍如何检查报告中的信息以查找和修复UI性能问题

5. 使用Systrace 检测警告以及掉帧问题

如下报告列出了每个进程呈现UI帧,并指示沿着时间线的每个渲染帧。 在绿色框架圆圈中指示在16.6毫秒内呈现的帧以保持每秒稳定60帧。 花费16.6毫秒以上渲染的帧用黄色红色框圈表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意: 在运行Android 5.0(API级别21)或更高版本的设备上, UI 渲染的工作是在UI ThreadRenderThread两个线程完成。 在之前的版本中,创建框架的所有工作都是在UI Thread上完成的。

点击一个F框架圈可以提供有关系统为渲染该框架而完成的工作的其他信息,包括警报。 它还向您展示了在渲染该框架时系统正在执行的方法,因此您可以调查这些方法是否导致UI jank

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择慢帧后,您可能会在报告的底部窗格中看到警报。 上图中显示的Alert提出,框架的主要问题是在ListView回收和重新绑定中花费了太多的时间。 跟踪中有相关事件的链接可以解释更多关于系统在这段时间内正在做什么的事情。

要查看工具在trace中发现的每个Alert以及设备触发Alert的次数,请单击窗口最右侧的Alerts选项卡,如下图所示。 Alerts面板可帮助您查看发生了哪些问题,以及发生的频率。 将Alert面板看作是要修复的错误列表, 通常情况下,一个区域的微小变化或改进可以消除应用程序中的全部警报。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你在UI Thread上做太多的工作,你需要找出哪些方法消耗了太多的CPU时间。 一种方法是添加跟踪标记(请参阅检测应用代码)到您认为会导致这些瓶颈的方法,以查看这些函数调用是否显示在systrace中。 如果您不确定哪些方法可能会在UI线程上造成瓶颈,请使用Android Studio的内置CPU分析器,或者生成跟踪日志并使用Traceview查看它们。

6. 查看trace 文件的快捷键

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7. 代码中添加trace 标记具体分析问题所在

由于systrace是在系统级显示有关进程的信息,因此很难在HTML报告中的某个特定时间知道您的应用程序正在执行什么方法。 在Android 4.3(API级别18)及更高版本中,您可以使用代码中的Trace类在HTML报告中标记执行事件。 您不需要用代码来记录systrace的跟踪记录,但是这样做可以帮助您查看应用程序代码的哪些部分可能会导致线程挂起或UI断线。 这种方法与使用Debug类不同,Trace类简单地将标志添加到systrace报告中,而Debug类可帮助您通过生成.trace文件来检查详细的app CPU使用情况。

要生成包含已检测的跟踪事件的systrace HTML报告,需要使用-a--app命令行选项运行systrace,并指定应用程序的包名称。

通常我们在怀疑引起jank代码地方,添加如下内容: Trace.beginSection("MyAdapter.onCreateViewHolder");Trace.endSection(); ,主要这两个是成对出现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多次调用beginSection(String)时,调用endSection()只会结束最近调用的beginSection(String)方法。 因此,对于嵌套的调用,例如上面示例中的调用,您需要确保通过调用endSection()将每个调用正确匹配到beginSection()

此外,您不能在一个线程上调用beginSection()并从另一个线程结束 - 您必须从同一线程调用endSection()

8. 使用TraceView 分析trace Log

Traceview是提供跟踪日志的图形表示的工具。 您可以通过使用Debug类来设置代码来生成日志。 这种跟踪方法非常精确,因为您可以准确指定要启动的代码中的哪个位置,并停止记录跟踪数据。 如果尚未生成这些跟踪日志并将其从连接的设备保存到本地计算机,请转至通过检测应用程序生成跟踪日志。 使用Traceview检查这些日志可帮助您调试您的应用程序并剖析其性能。

提示:可以使用命令行中的dmtracedump来生成跟踪日志文件的图形调用堆栈图。

如果您不需要查看通过使用Debug类检测应用程序来记录的跟踪日志,则可以使用Android Studio 3.0及更高版本中包含的CPU分析器来查看应用程序的线程和记录方法跟踪。

使用Android Device Monitor可以查看trace Log内容,步骤如下,打开Android Device Monitor,选择File,然后打开*.trace log分析。 当然,你也可以使用Android Device Monitor 的图形按键进行trace的抓取与查看。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打开跟踪日志后,Traceview使用以下两个窗格显示日志数据:

    1. 时间轴窗格: 描述每个线程何时进入和退出方法的时间轴窗格
    1. 配置文件窗格: 总结每个线程在跟踪日志的执行期间的配置文件窗格 以下各节提供有关traceview输出窗格的附加信息。

1.时间轴窗格

每个线程的执行都显示在自己的进程中,并且时间向右增加。 每种方法都以不同的颜色显示。 第一行下方的细线显示所选方法的子项(从入口到出口),如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2. 配置文件窗格

如下图所示,配置文件窗格提供了系统在跟踪日志期间执行的每种方法的列表以及执行这些方法所用的时间。 调用另一个方法的方法称为父级方法,父级调用的方法称为其子级。 当您通过单击方法选择一种方法时,它会在两个单独的节点下显示其父项和子项。

对于每种方法(顶级节点),该表都显示包含和排他时间(以毫秒为单位)以及总时间的百分比。独占时间是执行方法自己的代码的时间,而包含时间是执行方法自己的代码的时间加上执行子程序的时间。定时信息也以CPU时间和实时的方式报告。 CPU时间只考虑线程主动使用CPU时间的时间,实时提供绝对时间信息,从您的应用程序进入方法的时刻到退出该方法的时间 - 无论线程处于活动状态还是休眠状态。

对于配置文件窗格中的每个顶级节点,表中的Calls + RecCalls / Total列(图2中未显示)将报告该方法的调用次数和递归调用次数。或者,对于父级和子级方法,此列显示方法在顶级节点中是方法的子级或父级的调用次数。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
Traceview 已知问题

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-BAzTJcfp-1710913795187)]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/725346
推荐阅读
相关标签
  

闽ICP备14008679号