標籤:
繼承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異常捕獲處理