1. 程式人生 > >Android如何處理未捕獲異常

Android如何處理未捕獲異常

在應用執行過程中,有很多異常可能會發生,而我們希望在異常發生的時候第一時間的儲存現場。

如何處理未捕獲的異常呢?

首先我們要實現一個介面  java.lang.Thread.UncaughtExceptionHandler    ,要實現該接口裡面的   ,在這個函式裡面,我們可以做一些處理。例如將異常資訊儲存到sdcard上的某個位置,或者提示使用者異常出現等等一些操作。

我們在進入Activity的onCreate函式的時候,設定一下處理未捕獲異常 

Thread.setDefaultUncaughtExceptionHandler(
			new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this)
		);


發生異常時,做的處理。

public class UncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
	private final Context myContext;

	public UncaughtExceptionHandler(Context context) {
		myContext = context;
	}

	public void uncaughtException(Thread thread, Throwable exception) {
		StringWriter stackTrace = new StringWriter();
		exception.printStackTrace(new PrintWriter(stackTrace));
		System.err.println(stackTrace);

		Intent intent = new Intent(
			"android.fbreader.action.CRASH",
			new Uri.Builder().scheme(exception.getClass().getSimpleName()).build()
		);
		try {
			myContext.startActivity(intent);
		} catch (ActivityNotFoundException e) {
			intent = new Intent(myContext, BugReportActivity.class);
			intent.putExtra(BugReportActivity.STACKTRACE, stackTrace.toString());
			myContext.startActivity(intent);
		}

		if (myContext instanceof Activity) {
			((Activity)myContext).finish();
		}

		Process.killProcess(Process.myPid());
		System.exit(10);
	}
}


通過這樣的方式,首先能夠提高使用者體驗,避免了強制關閉的問題的發生。更有效的收集異常資訊。