Android 进程退出分析
接口限制
Android 11(API 30)及以上级别的Android版本中新增了进程退出原因接口,可以获取最近以来指定进程的退出原因。进程退出分析通过读取android.app.ApplicationExitInfo
来获取应用的退出信息,并上报服务器。
Android系统接口:
getHistoricalProcessExitReasons(String packageName, Int pid, Int maxNum)
接口限制
- Android 11 (API 30)及以上级别的Android版本。
- 异常原因为REASON_ANR时,会采集ANR Trace信息。
- 异常原因为REASON_CRASH_NATIVE时,并且是Android 12及以上版本,会采集tombstone信息。
退出原因
ApplicationExitInfo类中包含的进程退出原因字段,Bugly专业版将其中部分原因归为异常退出。
类型 | 值 | 字段名 | 字段含义 | 是否归入异常退出 |
---|---|---|---|---|
int | 6 | REASON_ANR | 程序因ANR终止 | 是 |
int | 4 | REASON_CRASH | 程序因Java代码中异常终止 | 是 |
int | 5 | REASON_CRASH_NATIVE | 程序因native代码崩溃终止 | 是 |
int | 12 | REASON_DEPENDENCY_DIED | 程序被杀死因为依赖丢失 | 是 |
int | 9 | REASON_EXCESSIVE_RESOURCE_USAGE | 程序因资源使用过多被杀死 | 是 |
int | 1 | REASON_EXIT_SELF | 程序正常自行退出 | 否 |
int | 14 | REASON_FREEZER | 程序被App Freezer杀死 | |
int | 7 | REASON_INITIALIZATION_FAILURE | 程序因初始化失败被杀死 | 是 |
int | 3 | REASON_LOW_MEMORY | 程序因低内存被杀死 | 是(仅前台) |
int | 13 | REASON_OTHER | 程序因其他各种原因被系统杀死,这些原因不是程序问题,如系统刚完成更新 | 否 |
int | 8 | REASON_PERMISSION_CHANGE | 程序因运行时权限更改被终止 | 是 |
int | 2 | REASON_SIGNALED | 程序因操作系统信号终止,如SIGKILL | 否(上报,但不统计) |
int | 0 | REASON_UNKNOWN | 程序因不明原因退出 | 否 |
int | 10 | REASON_USER_REQUESTED | 程序被用户请求终止,如“强制退出“ | 否 |
int | 11 | REASON_USER_STOPPED | 程序在多用户设备上被终止 | 否 |
配置开启
你只需要在设置/SDK配置中,调整进程退出原因的配置参数,即可开启该功能。
- sample_ratio,设备采样率,表示允许多少比例的设备开启相关监控项。
- exit_file_ratio,REASON_ANR包含ANR trace信息,REASON_CRASH_NATIVE在android 12的系统中,包含tombstone信息。用户可以自行设置相关采样率,以控制这些信息的采集情况。
重要提醒
- 进程退出原因默认是关闭,需要通过调整配置开启。用户可以控制用户采样率,以及退出现场信息的采样率。
- 用户采样率是针对所有的用户而言,包括Android 11以下的用户。Android 11以下的用户,即使收到允许开启的配置,由于接口不支持,也无法真正开启该监控功能。
- 发生REASON_CRASH_NATIVE时,只有Android 12及其以上的系统,允许采集tombstone的信息。
- 当前通过读取系统接口的方式来获取数据,原则上没有稳定性风险,但是由于功能还在灰度验证中,请谨慎使用。