admin管理员组

文章数量:1580416

和你一起终身学习,这里是程序员 Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

1.UI 渲染简介

2.识别延迟

3.Visual inspection

4.Systrace

5.Custom performance monitoring

6.fix 延迟问题

7.常见延迟问题的来源

8.渲染性能问题

9.线程调度延迟

10.分配对象和垃圾回收机制

1.UI 渲染简介

UI渲染是从应用程序生成并将其显示在屏幕上的动作。为确保用户与应用程序的交互顺畅,您的应用程序应在16毫秒内完成渲染 ,从而达到每秒60帧(为什么要60fps?的效果要求。如果您的应用程序的UI呈现速度较慢,则系统将被迫跳过帧,这样用户会感觉到您的应用程序出现了卡顿现象,我们称这个延迟。

为了帮助您提高应用程序质量,Android会自动监视您的应用程序是否存在卡顿渲染慢的问题,并在Android vitals仪表板中显示相关信息。有关如何收集数据的信息,请参阅Play控制台文档。

如果您的应用程序出现卡顿渲染问题,此页面将提供有关诊断和解决问题的指南。

Android vitals 仪表板和 Android 系统会跟踪使用 UI Toolkit 的应用程序的渲染时间统计信息(从中Canvas 或 View 层次结构中绘制应用程序的用户可见部分)。如果您的应用程序不使用UI工具包(使用Vulkan,Unity, Unreal或 OpenGL构建的应用程序就是这种情况) ,则Android Vitals仪表板中不提供渲染时间统计信息。您可以通过运行确定设备是否正在记录应用的呈现时间指标:

adb shell dumpsys gfxinfo

2. 识别延迟

在应用程序中查明导致延迟的代码可能很困难。本节介绍三种识别延迟的方法:

Visual inspection 使您可以在几分钟内快速遍历应用程序中的所有用例,但是它提供的信息不如Systrace那么多。

Systrace提供了更多详细信息,但是如果您为应用程序中的所有用例运行了Systrace,则会被大量数据淹没,以至于难以分析。

Visual inspection 和systrace都可以检测本地设备上的延迟问题。

Custom performance monitoring自定义性能监控,如果您的延迟问题无法在本地设备上复制,则可以使用自定义性能监控来衡量在现场运行的设备上应用程序的特定部分。

3.Visual inspection

视觉检查可帮助您识别产生延迟的部分。要执行外观检查,请打开您的应用程序,然后手动浏览应用程序的不同部分,并注意用户界面是否卡顿。以下是进行外观检查时的一些技巧:

运行您的应用。

为了支持调试功能,ART运行时会禁用一些重要的优化,因此请确保您正在查看的内容与用户看到的内容相似。

Profile GPU渲染在屏幕上显示条形,可以快速直观地表示渲染UI窗口的帧相对于每帧16毫秒基准所花费的时间。每个条都有彩色的组件,这些组件映射到渲染管线中的某个阶段,因此您可以查看哪个部分占用的时间最长。例如,如果框架花费大量时间处理输入,则应查看处理用户输入的应用程序代码。

注意某些组件

例如RecyclerView 这个是常见的卡顿延迟问题的来源。如果您的应用程序使用了这些组件,那么最好遍历应用程序的这些部分。

有时,冷启动该应用程序后,也可以复现延迟问题 。

尝试在速度较慢的设备上运行您的应用,以加剧该问题。

一旦找到产生卡顿延迟代码的地方,您可能对导致应用程序卡顿延迟原因有了一个很好的了解。但是,如果您需要更多信息,则可以使用Systrace进一步深入研究。

4.Systrace

Systrace是显示整个设备运行状况的工具,它对识别应用程序中的卡顿延迟代码很有用。Systrace系统开销很小,因此你可以通过Systrace 仪器检测实时延迟的问题。

在设备上执行复杂的用例时,使用Systrace记录跟踪。有关如何使用Systrace的说明,请参阅Systrace演练。systrace被进程和线程分解。在Systrace中查找应用程序的过程,该过程应类似于图1。

systrace

图1中的systrace包含以下信息,用于标识垃圾邮件:

Systrace显示何时绘制每帧,并对每帧进行颜色编码以突出显示较慢的渲染时间。与视觉检查相比,这可以帮助您更准确地找到单个渲染卡顿帧。有关更多信息,请参见 Framework 框架。

Systrace可以检测您的应用程序中的问题,并在单独的框架和 警报面板中显示警报。最好按照警报中的指示进行操作。

Android框架和库的某些部分(例如 RecyclerView )包含Systrace跟踪标记。因此, systrace时间线显示了这些方法何时在UI线程上执行以及它们执行多长时间。

在查看systrace输出之后,您的应用程序中可能存在一些可能导致卡顿延迟的方法。例如,如果时间轴显示帧 RecyclerView 时间过长导致帧缓慢,则可以将Trace标记添加到相关代码中,然后重新运行systrace以获取更多信息。在新的systrace中,时间线将显示您的应用程序的方法何时被调用以及它们执行的时间。

如果systrace并未向您显示有关UI线程为什么需要花费很长时间的详细信息,那么您将需要使用Android CPU Profil

本文标签: 太多线程性能Java