ANR 应用无响应/卡顿

针对应用卡顿、死机、无法及时响应现象,Mi 提供 ANR 和 卡顿功能。 ANR,全称 Application Not Responding 或 The Application of Non Response,意思是“应用无响应”。引起 ANR 问题的根本原因,可以大致归为两类:

  • 应用进程自身引起。例如:主线程阻塞、挂起、死循环。应用进程的其他线程 CPU 占用率过高,导致主线程无法抢占 CPU 时间片等。

  • 其他进程间接引起。例如:当前应用进程与其他进程开展通信请求,其他进程长时间没有反馈。或者其他进程 CPU 占用率过高,导致当前应用进程无法抢占 CPU 时间片。

iOS 卡顿产生原因主要因为 UIKIT 本身的特性,所有 UI 操作都在主线程执行,如果主线程中包含大量的 IO、计算、绘制等操作,就可能阻塞主线程刷新 UI 操作,产生卡顿。

ANR/卡顿对于应用的影响并不亚于 Crash,OneAPM Mobile Insight 提供了 ANR/卡顿监控功能,该模块主要包含以下功能点:

ANR/卡顿 趋势信息图

展现选定时间范围 APP ANR/卡顿次数及 ANR/卡顿率时间曲线图。

ANR 率:指选定时间范围内 ANR 影响的会话数与用户总会话次数之比; 卡顿率:指选定时间范围内卡顿影响的会话数与用户总会话次数之比;

A8 001

ANR/卡顿饼状图分布

展示 ANR/卡顿在应用版本、地域、联网方式、系统版本、设备上的分布状况,并支持多维度分析。

A8 002

ANR/卡顿 问题列表

按照 ANR/卡顿问题类型展示 ANR/卡顿发生时的线程信息、发生次数、解决/未解决状态、影响用户数等信息。

A8 003

点击 ANR 发生次数,可进入 ANR/卡顿 问题详情页面,可查看 ANR/卡顿 发生时的以下信息:

  • 用户信息:默认为 DeviceID,用户可通过 Mi 接口配置自定义的用户信息;
  • 开始时间:用户一次访问的开始时间;
  • 持续时间:用户从访问开始到用户关闭 APP/APP 发生崩溃 /用户访问超时(超过 30 分钟无动作);
  • 版本号:应用版本号;
  • 是否有 Crash :该次访问中用户是否发生崩溃;
  • 用户满意度:根据 UEI 值进行评估,( 0 - 60 分 )显示为不满意,( 60 - 80 分 )显示为一般,( 80 - 100 分)显示为满意;
  • 联网方式:用户联网方式,例如中国移动 3G/4G 等;
  • 地理位置:用户设备地理位置;
  • 用户动作总数:一次访问过程中用户与 APP 所有的用户动作数;
  • 缓慢动作数:动作执行响应时间超过 300 ms (可调)的动作总数;
  • 设备:用户设备类型及操作系统;
  • 用户轨迹:用户访问过程中随时间变化的动作轨迹,其中正常动作采用聚合方式展示,缓慢动作单独呈现,采用红色标注执行时间,使用红色 ‘A’ 来表示 ANR 现象;

A8 004

ANR/卡顿详情信息,展示 ANR/卡顿过程后的 log 信息以及 trace 文件,帮助开发者定位 ANR/卡顿问题原因。

A8 005