南昌市网站建设,网站开发数据库设计的作用,国内疫苗接种率,云平台建设网站DefaultUncaughtExceptionHandler 是 Android 中的一个接口#xff0c;用于处理未捕获异常。默认情况下#xff0c;Android 系统有一个默认的未捕获异常处理器#xff08;Thread.defaultUncaughtExceptionHandler#xff09;当程序抛出未捕获的异常时#xff0c;系统会调用…DefaultUncaughtExceptionHandler 是 Android 中的一个接口用于处理未捕获异常。默认情况下Android 系统有一个默认的未捕获异常处理器Thread.defaultUncaughtExceptionHandler当程序抛出未捕获的异常时系统会调用默认的未捕获异常处理器来处理该异常。
可以通过设置自己的异常处理器来替换默认的处理器以实现自定义的异常处理逻辑在自定义的异常处理逻辑中就可以获取到异常的堆栈信息并输出到本地方便定位到具体的问题。 要替换默认的未捕获异常处理器可以使用 Thread.setDefaultUncaughtExceptionHandler() 方法来设置自定义的异常处理器。
在 Application 中
class MyApp : Application() {override fun attachBaseContext(base: Context?) {super.attachBaseContext(base)Thread.setDefaultUncaughtExceptionHandler { _, e -// 收集崩溃日志val writer StringWriter()val printWriter PrintWriter(writer)e.printStackTrace(printWriter)printWriter.close()val crashText writer.toString()// 输出崩溃日志val path ${externalMediaDirs[0].absolutePath}/crash.txtval fw FileWriter(File(path), false)fw.write(crashText)fw.close()// 主线程已进入阻塞状态需要退出程序Process.killProcess(Process.myPid())exitProcess(1)}}
}
建议在 attachBaseContext 方法就设置好异常捕获因为在 onCreate 中初始化也是有可能会出现异常的 在应用出现崩溃时主线程是在阻塞状态的所以输出完日志后还需要将程序关闭否则就会 ANR 了
因为涉及到文件的读写还需关心是否有权限相关的问题在高版本中在 external 读写文件已经不用授权了但是在低版本中是需要的