默谷资源网

专业网站建设资源库

「独家」:拯救安卓系统卡顿,必定要掌握的

安卓系统APP卡顿,大部分是技术上的UI渲染问题,如果应用程序在16ms内渲染帧数到达每秒60帧,那么这款应用将会是很流畅的。反之,系统被迫跳帧就会出现卡顿现象,就这篇文章来讲一讲如何发现安卓APP卡顿现象,以及卡顿解决方法!

一般主线程过多的 UI 绘制、大量的 IO 操作或是大量的计算操作占用 CPU,导致 App 界面卡顿。只要我们能在发生卡顿的时候,捕捉到主线程的堆栈信息和系统的资源使用信息,即可准确分析卡顿发生在什么函数,资源占用情况如何。那么问题就是如何有效检测 Android 主线程的卡顿发生?

常用的方式是使用 adb SurfaceFlinger 服务和 adb gfxinfo 功能,在自动化操作 app 的过程中,使用 adb 获取数据来监控 app 的流畅情况,发现出现出现卡顿的时间段,寻找出现卡顿的场景和操作。

方式1:adb shell dumpsysSurfaceFlinger

使用 ‘adb shell dumpsysSurfaceFlinger' 命令即可获取最近 127 帧的数据,通过定期执行 adb 命令,获取帧数来计算出帧率 FPS。

方式2:adb shell dumpsys gfxinfo

使用 ‘adb shell dumpsys gfxinfo' 命令即可获取最新 128 帧的绘制信息,详细包括每一帧绘制的 Draw,Process,Execute 三个过程的耗时,如果这三个时间总和超过 16.6ms 即认为是发生了卡顿。

已有的两种方案,比较适合衡量回归卡顿问题的修复效果和判断某些特定场景下是否有卡顿情况,然而,这样的方式有几个明显的不足:

一般很难构造实际用户卡顿的环境来重现,并且这种方式操作起来比较麻烦,需编写自动化用例,无法覆盖大量的可疑场景,测试重现耗时耗人力。这种方法还无法衡量静态页面的卡顿情况。出现卡顿的时候app无法及时获取运行状态和信息,开发定位困难。

随着对Android 源码的深入研究,也有了其他的便利方式,用友盟+u-apm工具观察 App 的卡顿数据情况,试图重现场景来定位问题,u-apm卡顿分析功能支持,卡顿趋势的查找、卡顿列表的筛选、卡顿模块的计算、卡顿分布的筛选、卡顿详情页面的展示,以上功能模块都以图表的形式直观展示。

通过接入友盟平台,我们可以使用应用崩溃、ANR、自定义异常等捕获能力,以及卡顿检测、启动分析、内存分析、网络分析等性能监测能力,支持多方面智能告警监测。是一款功能强大且全面的性能检测工具。

接着来说一说看,卡顿的一些解决方案

1、过度绘制

去除不必要的背景色

设置窗口背景色为通用背景色,去除根布局背景色。

若页面背景色与通用背景色不一致,在页面渲染完成后移除窗口背景色

去除和列表背景色相同的Item背景色

2、布局视图树扁平化

移除嵌套布局

使用merge、include标签

使用性能消耗更小布局(TableLayout、ConstraintLayout)

减少透明色,即alpha属性的使用

通过使用半透明颜色值(#77000000)代替

3、其他

使用ViewStub标签,延迟加载不必要的视图

使用AsyncLayoutInflater异步解析视图

综上所述,文章简要讲述了一些卡顿的优化方案,以及如何找出安卓APP卡顿的原因,在这一板块我们详细提出了友盟+u-apm这一应用性能检测工具,u-apm在实际应用中功能概括全面,使用起来丝滑流畅,推荐!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言