Android崩溃防护提供Java崩溃和Java启动崩溃防护,可以增加App稳定性,提升用户体验。异常防护的集成对业务代码没有任何侵入性,能够进行异常后的兜底,并将问题上报到平台,帮助您及时发现问题。
系统检测到程序未进行try-catch的Java异常,默认在KillApplicationHandler中强制退出应用,并弹出一个应用崩溃的对话框。发生这种Java崩溃时,您可以给应用设置自定义的UncaughtExceptionHandler。Java崩溃监控工具通常利用UncaughtExceptionHandler来收集异常信息,正常情况按链路最终还是会走到KillApplicationHandler,退出应用。而Android崩溃防护功能实现了自己的UncaughtExceptionHandler,根据平台下发的配置对异常画像进行匹配,匹配成功则消费掉异常,结束链路调用,使应用正常运行。如果是主线程发生的崩溃,防护后将会重启loop,继续处理消息队列中的消息。如果是子线程发生异常,将会退出或挂起。需要注意的是,主线程和子线程都无法执行崩溃点之后的程序逻辑。
注意
主线程发生的崩溃,防护后ApmPlus SDK会重启looper,再次发生未防护的崩溃,堆栈中会包含com.apm.insight,可以忽略。
注意
- Android的崩溃防护无法继续执行崩溃位置后的程序逻辑。重要的业务逻辑和防护后有可能导致用户体验下降的场景不建议开启防护。每条规则都应该谨慎评估后创建,充分测试后下发。
- SDK检测到崩溃堆栈中包含onCreate、onStart、onResume、onPause方法时,将不进行防护。
崩溃防护配置页面内置的策略就是默认兜底策略。默认兜底策略是根据经验总结的一些非业务代码导致的程序异常,异常发生时通常不会对程序产生显著影响。策略默认关闭,需要使用时请在崩溃防护配置页面打开开关并配置采样率。
- 在崩溃防护配置页面,打开列表右上角的总开关,然后单击创建配置。
-
- 在崩溃防护列表中,单击编辑,可以修改已创建的崩溃防护配置中所有的配置项。
- 在崩溃防护列表中,单击复制,可以保留已创建的崩溃防护配置的配置项,只需要您自定义规则名称。
- 在崩溃防护列表中,单击删除,在二次确认框中单击删除,即可删除该配置。
- 在崩溃防护列表中,单击查看防护数据,即可跳转到崩溃防护页面查看崩溃防护的详细信息。
在Java崩溃或者Java启动崩溃页面,评估适合进行防护后,可以在原始堆栈页签中单击崩溃防护按钮,平台将根据当前崩溃信息自动生成一条崩溃防护策略。自动生成的崩溃策略根据聚合信息选取崩溃画像,选取信息不一定合理,可以根据实际情况进行调整。
注意
资源耗尽类型崩溃不建议生成防护,很可能导致卡顿,最终还是会崩溃。
崩溃防护中的统计数据可以帮助应用拦截的异常,但后续仍需要对issue做处理和修复。
您可以通过以下筛选条件进行Android系统的数据筛选:
时间、崩溃详情、设备ID、User ID、issue新增状态、前后台、系统版本、机型、APP版本、APP小版本号、APM SDK版本、下载渠道、ROM信息、省份、使用时长、进程名、厂商、解析情况、APP页面、issue状态、处理人、标签、自定义维度、PV自定义维度。
注意
在自定义维度添加了保留字段rule_id作为筛选条件后,如果开启崩溃防护功能,不建议在崩溃监控中使用rule_id自定义维度。
崩溃拦截趋势展示了筛选条件下崩溃拦截指标的趋势图,您也可以将趋势图按照分组维度展示。指标数据的右侧可以查看与上一周期相比崩溃拦截数据的变化。
指标说明:
崩溃拦截分布通过多维分析来了解已拦截的异常崩溃的分布情况以定义问题。
- 悬停在分布图上可以查看当前分类的全称,以及在该指标类型中的占比。
- 默认以系统版本、机型、APP版本和APP小版本号4个维度展示已拦截的崩溃的分布情况,支持单击设置按钮选择其他维度,例如APM SDK版本、前后台、下载渠道、ROM信息等等。
- 默认根据上报量展示错误的分布情况,您也可以配置为根据用户量展示拦截崩溃的分布。
拦截异常崩溃列表中展示了同一类已拦截的异常崩溃聚合后的issue数据,包括影响用户数、发生次数、崩溃率、最近发生时间、日志上报时间、状态、处理人。
- 崩溃说明:单击可以跳转到崩溃详情中查看更多崩溃信息。
- 影响用户数:单击数字后的图标可以预览趋势图,悬浮趋势图可以查看对应的时间。
- 发生次数:单击数字后的图标可以预览趋势图,悬浮趋势图可以查看对应的时间。
- 崩溃率:该类拦截异常崩溃的崩溃次数/总launch数。
- 日志上报时间:该拦截异常崩溃信息到服务端的时间。
- 例如,拦截异常崩溃的发生是在version 1.0版本,但是上报是在version 1.2版本,为了避免信息差,列表会把问题发生时和上报时所有的现场信息进行上报。
- 排序:列表默认按照影响用户数、发生次数、崩溃率降序排序。单击最近发生时间或日志上报时间,可以按照时间降序或者升序排序。
- 下载:单击右上角下载按钮,下载前100条数据,以.xlsx的文件格式展示列表中的数据。
- 设置:单击右上角设置按钮,可以自定义列表展示的列数据。除了默认的列数据,您还可以配置:同比发生次数、同比影响用户数、同比崩溃率、影响用户率、同比影响用户率、起止版本。
详情崩溃趋势展示了该类issue的崩溃数和影响用户数两个指标的变化趋势。
详情拦截崩溃趋势图和列表拦截崩溃趋势不同,区别如下:
- 列表拦截崩溃趋势:时间范围内所有已拦截的异常崩溃。
- 例如,7天为时间周期,1小时为聚合粒度,可以看到7天内每小时的拦截崩溃趋势,崩溃次数20。
- 详情拦截崩溃趋势:时间范围内所有已拦截的异常崩溃的聚合。
- 例如,7天为时间周期,1小时为聚合粒度,崩溃列表中有5个崩溃项,即系统将20次崩溃分类为5个崩溃项,打开其中一个崩溃项,详情拦截崩溃趋势是同一类崩溃项在7天内的崩溃趋势。
详细信息可以查询单次crash的各字段属性。
- 追查:单击设备标识ID或UserID旁的追查可跳转至**日志查询,**以查询完整的上下文日志流。
- 原始堆栈展示的原始堆栈信息,即客户端上传的原始日志中的堆栈信息。
- 如果已上传符号表,客户端堆栈仍未处理,可能是符号表未全部上传。
- 如果符号表或解析有误,可以重新上传符号表,然后在Retrace的界面单击重试Retrace。
在符号表页面,手动上传符号表。
上传符号表后效果如下:
现场数据展示了发生崩溃防护时的程序运行状态。