定义MyCrashHandler类,该类实现java.lang.Thread.UncaughtExceptionHandler接口。
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.os.Build;
import android.os.Looper;
public class MyCrashHandler implements UncaughtExceptionHandler {
private static MyCrashHandler myCrashHandler;
private Context context;
private MyCrashHandler() {
}
public static synchronized MyCrashHandler getInstance() {
if (myCrashHandler != null) {
return myCrashHandler;
} else {
myCrashHandler = new MyCrashHandler();
return myCrashHandler;
}
}
public void init(Context context) {
this.context = context;
}
public void uncaughtException(Thread thread, final Throwable arg1) {
new Thread() {
@Override
public void run() {
super.run();
Looper.prepare();
String errorinfo = getErrorInfo(arg1);
//TODO 处理errorinfo
Looper.loop();
}
}.start();
//Thread.sleep()是为了等待上面处理errorinfo的线程结束。
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
android.os.Process.killProcess(android.os.Process.myPid());
}
private String getErrorInfo(Throwable arg1) {
Writer writer = new StringWriter();
PrintWriter pw = new PrintWriter(writer);
arg1.printStackTrace(pw);
pw.close();
String error = writer.toString();
return error;
}
}
使用MyCrashHandler捕获异常
MyCrashHandler handler = MyCrashHandler.getInstance();
handler.init(context.getApplicationContext());
Thread.setDefaultUncaughtExceptionHandler(handler);//将handler设置为默认