標籤:
1.簡介對於程式拋出的未被捕獲的異常,可能會導致程式異常退出,介面不友好且應記錄嚴重錯誤資訊上傳至伺服器。這裡主要使用UncaughtExceptionHandler
我們在進入Activity的onCreate函數的時候,設定一下處理未捕獲異常
1.簡介對於程式拋出的未被捕獲的異常,可能會導致程式異常退出,介面不友好且應記錄嚴重錯誤資訊上傳至伺服器。這裡主要使用UncaughtExceptionHandler2.代碼實現public class CrashHandler implements UncaughtExceptionHandler {public static final String TAG = CopyOfCrashHandler.class.getSimpleName();// 系統預設的UncaughtException處理類private Thread.UncaughtExceptionHandler mDefaultHandler;private static CopyOfCrashHandler instance;private Context mContext;private CopyOfCrashHandler() {}/** 擷取CrashHandler執行個體 ,單例模式 */public static CopyOfCrashHandler getInstance() {if (instance == null)instance = new CopyOfCrashHandler();return instance;}/** * 初始化 */public void init(Context context) {mContext = context;//記錄下預設的UncaughtExceptionHandlermDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();//Thread.setDefaultUncaughtExceptionHandler(this);}/** * 當UncaughtException發生時會轉入該函數來處理 */@Overridepublic void uncaughtException(Thread thread, Throwable ex) {if (!handleException(thread, ex) && mDefaultHandler != null) {// 如果使用者沒有處理則讓系統預設的異常處理器來處理mDefaultHandler.uncaughtException(thread, ex);} else {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}android.os.Process.killProcess(android.os.Process.myPid());System.exit(1);}}/** * 自訂錯誤處理,收集錯誤資訊 發送錯誤報表等操作均在此完成. * * @param ex * @return true:如果處理了該異常資訊;否則返回false. */private boolean handleException(Thread thread, Throwable ex) {if (ex == null) {return false;}StringBuffer sb = new StringBuffer();sb.append(thread + ", Cause By:" + ex).append("\r\n\r\n");StackTraceElement[] elements = ex.getStackTrace();for (int i = 0; i < elements.length; i++) {sb.append(elements[i].toString() + "\r\n");}//記錄下嚴重錯誤資訊,可以存至本地並上傳至伺服器//LogUtil.bug(TAG, sb.toString());//開啟新Activity友好介面提示//Util.showDialog(mContext, "時間:"+Util.formatSimpleDateAndTime(new Date()), "程式出現異常,請記錄時間並提示開發人員!");return true;}}
Android_程式未處理異常的捕獲與處理