# YmAndroidcrash **Repository Path**: ym521/ym-androidcrash ## Basic Information - **Project Name**: YmAndroidcrash - **Description**: 自定义Android crash 捕获全局异常并处理 - **Primary Language**: Android - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-04-09 - **Last Updated**: 2023-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YmAndroidcrash #### 介绍 自定义Android crash 捕获全局异常并处理,普通异常将不会导致APP闪退 #### 原理 YmAndroidcrash核心原理依赖于Thread.UncaughtExceptionHandler的异常反馈。 Thread.UncaughtExceptionHandler是一个当线程由于未捕获的异常突然终止而调用处理程序的接口; 当线程由于未捕获的异常即将终止时,Java虚拟机将使用它来查询其UncaughtExceptionHandler的线程Thread.getUncaughtExceptionHandler(), 并将调用处理程序的 uncaughtException方法,将线程和异常作为参数传递。 如果一个线程没有显示它的UncaughtExceptionHandler,那么它的ThreadGroup对象充当它的 UncaughtExceptionHandler。 如果ThreadGroup对象没有处理异常的特殊要求,它可以将调用转发到默认的未捕获的异常处理程序。 #### 安装教程 1. ###### 添加远程仓库 ```gradle maven { url 'https://jitpack.io' } ``` 2. ###### 添加依赖 [![](https://jitpack.io/v/com.gitee.ym521/ym-androidcrash.svg)](https://jitpack.io/#com.gitee.ym521/ym-androidcrash) ```gradle implementation 'com.gitee.ym521:ym-androidcrash:latestversion' ``` #### 使用说明 个人建议最好在自定义的Application的onCreate()中先调用;记得在AndroidManifest.xml 设置自定义的Application!!! ```kotlin class MyApplication : Application() { override fun onCreate() { super.onCreate() YmAndroidCrach.install(this, object : ExceptionHandler() { override fun onUncaughtExceptionHappened(thread: Thread?, throwable: Throwable?) { Log.e("YmAndroidCrach", "onUncaughtExceptionHappened:${throwable.toString()}") } override fun onBandageExceptionHappened(throwable: Throwable?) { Log.e("YmAndroidCrach", "onBandageExceptionHappened:${throwable.toString()}") } override fun onEnterSafeMode() { Log.e("YmAndroidCrach", "onEnterSafeMode:启动安全模式") } }) } } ``` ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); YmAndroidCrach.install(this, new ExceptionHandler() { @Override protected void onUncaughtExceptionHappened(@Nullable Thread thread, @Nullable Throwable throwable) { Log.e("YmAndroidCrach", "onUncaughtExceptionHappened:${throwable.toString()}"); } @Override protected void onBandageExceptionHappened(@Nullable Throwable throwable) { Log.e("YmAndroidCrach", "onBandageExceptionHappened:${throwable.toString()}"); } @Override protected void onEnterSafeMode() { Log.e("YmAndroidCrach", "onEnterSafeMode:启动安全模式"); } }); } } ```