Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android_程序未處理異常的捕獲與處理

Android_程序未處理異常的捕獲與處理

編輯:關於Android編程

1.簡介

對於程序拋出的未被捕獲的異常,可能會導致程序異常退出,界面不友好且應記錄關鍵錯誤信息上傳至服務器。這裡主要使用UncaughtExceptionHandler

2.代碼實現

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;
		//記錄下默認的UncaughtExceptionHandler
		mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
		//
		Thread.setDefaultUncaughtExceptionHandler(this);
	}

	/**
	 * 當UncaughtException發生時會轉入該函數來處理
	 */
	@Override
	public 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;
	}
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved