如今app的种类多种多样,但是开发一款app并不是一件简单的事情,需要研发人员花费大量的时间和精力。然而,如果app的性能不稳定,打开页面等待时间过长或者使用过程中卡顿现象的发生,用户就有可能放弃使用app。那么,这就需要对app性能进行优化了,app的优化是任重而道远的过程,从项目开始时就应该在意每一个环节,否则当你想起要优化的时候,发现到处都是坑,所以我们必须从细微处做起。比如说今天要说的卡顿,我们只有先了解卡顿,才能解决卡顿问题,话不多说,下面进入正文。

了解卡顿

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。Android系统每隔大概16.6ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。

有很多原因可以导致丢帧,一般主线程过多的UI绘制、大量的IO操作或是大量的计算操作占用CPU,都会导致丢帧。如果某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象。那么用户在32ms内看到的会是同一帧画面。

传统监测卡顿的方法

Trace API

Androidstudio的Profiler也提供了Trace的使用你可以自己选择某一段区域,也可以代码生成Trace文件,然后拖动到Androidstudio内打开查看。提供的2种方式比较灵活。

Looper日志检测卡顿

Android主线程更新UI。如果界面1秒钟刷新少于60次,即FPS小于60,用户就会产生卡顿感觉。简单来说,Android使用消息机制进行UI更新,UI线程有个Looper,在其loop方法中会不断取出message,调用其绑定的Handler在UI线程执行。如果在handler的dispatchMesaage方法里有耗时操作,就会发生卡顿。

只要检测 msg.target.dispatchMessage(msg) 的执行时间,就能检测到部分UI线程是否有耗时的操作。这样我们就可以通过两次log的时间差值,来计算dispatchMessage的执行时间,从而设置阈值判断是否发生了卡顿。

app使用过程中卡顿现象的发生,是客户和研发人员都不想看到的,如果用上面传统的方法排查bug问题,用户等待时间太长可能会直接卸载,这里就推荐开发者使用友盟+U-APM监测工具。友盟卡顿分析功能是通过U-APM提供的监控SDK 捕获所监控App主线程消息执行超时的情况,帮助您分析用户使用体验过程中反馈问题是否与卡顿现象间接引发有关,下面简单介绍一下卡顿分析功能。

友盟U-APM卡顿分析功能

卡顿趋势:

您可以在此页面查看不同时间段、筛选维度下的卡顿数据趋势,默认展示全部维度、今天的数据,您可以根据自己的查询条件进行筛选。

卡顿列表:

您可以在此列表中查看筛选维度+时间范围内,所有卡顿问题根据日志根据算法聚合后的错误列表,默认按照卡顿次数降序展示,帮助您快速的找到卡顿次数最多、影响最严重的卡顿问题。您也可以选择按照影响人数排行,找到影响面积最大的卡顿问题。

卡顿模块

卡顿模块通过智能算法聚类了卡顿的模块与子模块,支持正序聚合与倒序聚合。

卡顿分布

显示时间段内,按照设备(机型)、系统、运营商、版本、渠道、地域七个维度的错误次数分布图,按照页面整体筛选维度项进行筛查。

卡顿详情

点击卡顿摘要可以进入卡顿详情的页面;

您可以在此页面查看卡顿的详情信息,帮助您排查卡顿问题的原因,提供了卡顿趋势、卡顿分布、卡顿详细日志、卡顿设备信息以及卡顿备注的功能。

以上内容就讲解了app卡顿的原因,友盟U-APM卡顿分析模块可以帮助开发者快速收集卡顿数据,定位卡顿原因,更好进行性能优化。

另外,U-APM搭载了云真机测试服务,为开发者提供了灵活操作界面支持ADB调试、WEB远程调试、扫码、抓包、虚拟定位等测试功能,并提供了测试报告供开发者后续查看。者提供了灵活操作界面支持ADB调试、WEB远程调试、扫码、抓包、虚拟定位等测试功能,并提供了测试报告供开发者后续查看。助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。