全局异常捕获 UncaughtExceptionHandler
当app上线后,可能存在某些异常导致程序崩溃,开发者不能及时获取到底哪里出问题。所以在开发过程中,接入了第三方Crash分析平台比如Bugly、bugtags等。其实我们也可以很简单的实现全局异常处理。
未捕获异常大多发生在在多线程环境中,子线程抛出的异常是不能用主线程中try….catch捕获。可以给线程设置UncaughtExceptionHandler,当出现异常时会回调UncaughtExceptionHandler中的uncaughtException(Thread t, Throwable e) 方法。
// 全局所有线程设置
Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler handler);
// 指定线程设置
thread.setUncaughtExceptionHandler( UncaughtExceptionHandler handler);
class CrashHandler : Thread.UncaughtExceptionHandler {
/**
* 单例对象
*/
companion object {
val Instance by lazy { CrashHandler() }
}
private lateinit var mContext: Context
override fun uncaughtException(t: Thread?, e: Throwable?) {
// todo 自己处理异常逻辑,服务端上包、存本地log、弹出弹窗等
}
/**
* 在Application 中进行全局初始化
*/
fun init(context: Context) {
mContext = context
Thread.setDefaultUncaughtExceptionHandler(this)
}
}
网友评论