Java 崩溃在 Thread.UncaughtExceptionHandler 中需采用 "同步写入、延迟上报" 策略:
- 在自定义 handler 中收集关键信息:时间戳、异常类型、异常 message、堆栈轨迹、线程名等。
- 必须使用 SharedPreferences 的同步
commit()方法持久化,避免apply()异步写入因进程终止而丢失。 - 同时保留
originalHandler,最后调用它把控制权交还系统,确保系统弹窗等默认行为正常执行。 - 在应用下一次启动时,由后台线程读取本地缓存并上报至服务端,避免在进程濒死时尝试网络请求。
伪代码示例:
public void uncaughtException(Thread thread, Throwable t) {
try {
CrashData data = collectCrashData(thread, t);
prefs.edit().putString("last_crash", data.toJson()).commit();
} finally {
if (originalHandler != null) originalHandler.uncaughtException(thread, t);
}
}




