Android如何處理未捕獲異常
阿新 • • 發佈:2019-01-31
在應用執行過程中,有很多異常可能會發生,而我們希望在異常發生的時候第一時間的儲存現場。
如何處理未捕獲的異常呢?
首先我們要實現一個介面 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); } }
通過這樣的方式,首先能夠提高使用者體驗,避免了強制關閉的問題的發生。更有效的收集異常資訊。