全球手机市场中,安卓和iOS一直占着主流市场。iPhone手机给人的感觉就是流畅,而安卓手机却一直是卡顿的代名词。其实,安卓机刚上手时还是速度飞快的,并且基于它开放性的原则,受到多数用户的喜爱,但通病是:运行一段时间后,反应变慢、容易卡顿,这也是iOS用户不肯换安卓最主要的原因。通过友盟+U-APM可以复现安卓系统卡顿。 U-APM,这是友盟+推出的App性能监控平台,可以帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。下面我们就以下几种情况导致安卓系统卡顿问题进行分析处理。
1、过于复杂的布局
界面性能取决于 UI 渲染性能. 我们可以理解为 UI 渲染的整个过程是由 CPU 和 GPU 两个部分协同完成的。
其中, CPU 负责UI布局元素的 Measure, Layout, Draw 等相关运算执行. GPU 负责栅格化(rasterization), 将UI元素绘制到屏幕上。
如果我们的 UI 布局层次太深, 或是自定义控件的 onDraw 中有复杂运算, CPU 的相关运算就可能大于16ms, 导致卡顿。
解决方案:
我们需要借助 Hierarchy Viewer 这个工具来帮我们分析布局了. Hierarchy Viewer 不仅可以以图形化树状结构的形式展示出UI层级, 还对每个节点给出了三个小圆点, 以指示该元素 Measure, Layout, Draw 的耗时及性能。
2、过度绘制( Overdraw )
Overdraw: 用来描述一个像素在屏幕上多少次被重绘在一帧上.
通俗的说: 理想情况下, 每屏每帧上, 每个像素点应该只被绘制一次, 如果有多次绘制, 就是过度绘制了。 常见的就是绘制了多重背景或者绘制了不可见的UI元素。
解决方案:
Android系统提供了可视化的方案来让我们很方便的查看overdraw的现象:
在”系统设置”–>”开发者选项”–>”调试GPU过度绘制”中开启调试:
此时界面可能会有五种颜色标识:
overdraw indicator
原色: 没有overdraw
蓝色: 1次overdraw
绿色: 2次overdraw
粉色: 3次overdraw
红色: 4次及4次以上的overdraw
一般来说, 蓝色是可接受的, 是性能优的。
3、UI 线程的复杂运算
UI线程的复杂运算会造成UI无响应, 当然更多的是造成UI响应停滞, 卡顿。产生ANR已经是卡顿的极致了。
解决方案:
关于运算阻塞导致的卡顿的分析, 可以使用 Traceview 这个工具。
4、频繁的 GC
上面说的都是处理上的CPU, GPU 相关的. 实际上内存原因也可能会造成应用不流畅, 卡顿的。
为什么说频繁的 GC 会导致卡顿呢?
简而言之, 就是执行 GC 操作的时候,任何线程的任何操作都会需要暂停,等待 GC 操作完成之后,其他操作才能够继续运行, 故而如果程序频繁 GC, 自然会导致界面卡顿。
导致频繁GC有两个原因:
内存抖动(Memory Churn), 即大量的对象被创建又在短时间内马上被释放。瞬间产生大量的对象会严重占用 Young Generation 的内存区域, 当达到阀值, 剩余空间不够的时候, 也会触发 GC。即使每次分配的对象需要占用很少的内存,但是他们叠加在一起会增加 Heap 的压力, 从而触发更多的 GC。
解决方案:
一般来说瞬间大量产生对象一般是因为我们在代码的循环中 new 对象, 或是在 onDraw 中创建对象等。
以上这些地方是我们尤其需要注意的。友盟+U-APM性能监控平台,可以帮你更快寻找安卓系统卡顿原因,找到问题并解决问题。
U-APM应用性能监控平台,通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力, 及卡顿、启动分析、内存分析、网络分析等性能监测能力,支持多场景、多通道智能告警监测,帮助 开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。提供云真机测试能力,助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试 期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.