ANR Watchdog·NativeCrashHandler·ExceptionHandler 与安全模式的完整闭环
三种异常捕获
| 异常类型 | 处理器 | 捕获方式 |
|---|---|---|
| 系统 ANR | AnrWatchdog | 读取 Android ApplicationExitInfo.REASON_ANR,保存系统 ANR trace |
| JVM 崩溃 | ExceptionHandler | 全局未捕获异常处理器 |
| Native 崩溃 | NativeCrashHandler | Native 信号处理器(在 :native 模块内) |
三种异常分别记录自己的日志文件,互不干扰。
安全模式的触发条件
如果上次启动发生了以下任何一种情况:
- JVM 崩溃(
ExceptionHandler捕获) - Native 崩溃(
NativeCrashHandler捕获) - 系统 ANR(
ApplicationExitInfo.REASON_ANR)
应用启动时会优先进入安全模式(跳过正常的 Loading → Disclaimer → Onboarding → Main 启动流程)。
安全模式开放的操作
安全模式不提供正常的播放和浏览功能,只开放以下操作:
- 预览日志:查看上次 ANR / 崩溃的详细 trace
- 导出日志:把日志文件打包导出,方便提交 issue
- 配置导出:导出当前完整配置
- 登录重置:清除所有平台登录凭据
- 设置重置:恢复默认设置
- 崩溃标记清除:清除异常标记,下次正常启动
为什么不直接恢复正常
崩溃或 ANR 往往意味着状态损坏——如果直接让应用正常启动,损坏的 Room schema、未写入完成的数据库事务、或 Native 状态可能再次导致崩溃,形成崩溃循环。安全模式让用户先看清问题、选择合适的清理动作,而不是盲目重试。
正常启动的链路
正常启动流程:Loading → Disclaimer → Onboarding → Main
Loading:初始化数据库、恢复状态Disclaimer:免责声明(首次或更新版本时显示)Onboarding:引导页(Android 13+ 申请通知权限)Main:Compose NavHost 主界面(底栏:Home / Explore / Library / Settings)