
和你一起终身学习,这里是程序员Android
Android App 反应卡顿,从技术上将就是UI 渲染慢。
UI渲染是从您的应用程序生成一个框架并将其显示在屏幕上的行为。 为了确保用户与您的应用程序的交互顺利,您的应用程序应该在16ms内渲染帧数达到每秒60帧(为什么60fps?)。 如果您的应用程序因UI渲染速度缓慢而受到影响,那么系统将被迫跳过帧,用户将感觉到您的应用程序中出现卡顿。 我们把这个叫做jank。
本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
1.UI 渲染简介
2.识别Jank
3.Fix Jank
4.引起Jank 通用问题举例
1.UI 渲染简介
为了帮助您提高应用程序质量,Android会自动监视您的应用程序是否有空,并在Android生命危险仪表板中显示信息。 有关如何收集数据的信息,请参阅Play Console文档。
如果您的应用程序出现问题,本页提供诊断和解决问题的指导。
Android生命危险仪表板和Android系统会跟踪使用UI Toolkit的应用程序的渲染时间统计信息(应用程序的用户可见部分是从Canvas或View hierarchy绘制的)。
如果您的应用程序不使用UI Toolkit,就像使用Vulkan,Unity,Unreal或OpenGL构建的应用程序一样,则在Android Vitals仪表板中不提供时间统计信息。
您可以通过运行adb shell dumpsys gfxinfo <package name>
来确定您的设备是否正在记录您的应用的渲染时间指标。
2.识别Jank
在您的应用程序中定位引起jank的代码可能很困难。 本部分介绍了三种识别jank的方法:
- 1.Visual inspection
通过视觉检查,您可以在几分钟内快速浏览应用程序中的所有用例use-cases,但不能提供与Systrace相同的详细信息。
- 2.Systrace
Systrace提供了更多的细节,但是如果你运行Systrace来处理应用程序中的所有用例,那么就会被大量的数据淹没,难以分析。
- 3.Custom performance monitoring
Visual inspection和Systrace都会在你的本地设备上检测到。
如果不能在本地设备上重现,则可以构建自定义性能监视器Custom performance monitoring,以测量在现场运行的设备上应用的特定部分。
1. Visual inspection
目视检查可以帮助您识别正在生产结果的使用案例。 要执行视觉检查,请打开您的应用程序并手动检查应用程序的不同部分,然后查看非常粗糙的UI。 以下是进行目视检查时的一些提示:
- 1.运行release 版本
运行您release应用程序的版本(或至少不可调试)的版本。ART运行时为了支持调试功能而禁用了一些重要的优化,所以确保你正在寻找类似于用户将看到的东西。
-
- 开启GPU渲染
开启步骤:Settings -->Developer options -->Profile GPU rending
开启配置文件GPU渲染,会在屏幕上显示条形图,可以快速直观地显示相对于每帧16毫秒基准测试渲染UI窗口帧所花费的时间。
每个条都有着色的组件映射到渲染管道中的一个舞台,所以你可以看到哪个部分花费的时间最长。
例如,如果框架花费大量时间处理输入,则应该查看处理用户输入的应用程序代码。
-
- 留意特殊组件
有一些组件,如RecyclerView,是Jank普遍的来源。 如果您的应用程序使用这些组件,那么运行应用程序的这些部分是一个好idea。
-
- App 冷启动导致
有时候,只有当应用程序从冷启动启动(Clod start)时,才能复制jank。
- 5.低内存情况下jank 比较容易出现
一旦你发现产生jank的用例,你可能会有一个很好的想法是什么导致你的应用程序的结果。 但是,如果您需要更多信息,则可以使用Systrace进一步深入研究。
2. Systrace
Systrace是一个显示整个设备在做什么的工具,并且它可以用于识别应用程序中的Jank。 Systrace的系统开销很小,所以在仪器使用过程中你会感受到app卡顿的存在。
用Systrace记录跟踪,同时在设备上执行janky用例。 有关如何使用Systrace的说明,请参阅Systrace演练。 systrace被进程和线程分解

最低0.47元/天 解锁文章
2321

被折叠的 条评论
为什么被折叠?



