android异常捕获处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android异常捕获处理相关的知识,希望对你有一定的参考价值。

继承UncaughtExceptionHandler 接口,重写方法,进行处理

package com.example.exp;

import java.lang.Thread.UncaughtExceptionHandler;

import com.example.threadtest.MainActivity;

import android.app.AlertDialog;
import android.app.Application;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Looper;
import android.util.Log;

public class CrashHandler implements UncaughtExceptionHandler {

public static final String TAG = "CrashHandler";
private static CrashHandler INSTANCE = new CrashHandler();
private Application mContext;
private Thread.UncaughtExceptionHandler mDefaultHandler;

private CrashHandler() {
}

public static CrashHandler getInstance() {
return INSTANCE;
}

public void init(Application ctx) {
mContext = ctx;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}

@Override
public void uncaughtException(Thread thread, Throwable ex) {
// if (!handleException(ex) && mDefaultHandler != null) {
// mDefaultHandler.uncaughtException(thread, ex);
// } else {
// android.os.Process.killProcess(android.os.Process.myPid());
// System.exit(10);
// }
if (!handleException(ex) && mDefaultHandler != null) {
//如果用户没有处理则让系统默认的异常处理器来处理
mDefaultHandler.uncaughtException(thread, ex);
} else {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
Log.e(TAG, "error : ", e);
}
// 重新启动程序,注释上面的退出程序
Intent intent = new Intent();
intent.setClass(mContext,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}

}

/**
* 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑
*
* @param ex
* @return true:如果处理了该异常信息;否则返回false
*/
private boolean handleException(Throwable ex) {
if (ex == null) {
return true;
}
//TODO

return true;
}
}

以上是关于android异常捕获处理的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

在 Android 中设置全局未捕获异常处理程序的理想方法

Android_程序未处理异常的捕获与处理

Android视图:未捕获的处理程序:线程主因未捕获的异常而退出

Android中使用UncaughtExceptionHandler来处理未捕获的异常

Android应用捕获全局异常自定义处理