程序遇到异常时会Crash,通常可以通过try Catch的方法来捕获异常,并决定该异常是否抛出,造成程序的Crash
但是当异常语句不在try catch块内时,将不能捕获。
此时通过 uncaughtException(Thread thread, Throwable ex) 来捕获uncaught即原来没有捕获到的异常。
通常自己实现一个handler继承自UncaughtExceptionHandler,UncaughtExceptionHandler中实现uncaughException方法。
//代码不在身边下次再贴
此时,可以再uncaughException中对这类非预期的异常进行处理,可以进行错误日志记录等行为,这里对其进行崩溃后的自动重启。
首先程序抛异常后,要关闭整个应用。
网上常见这三种方法:
-android.os.Process.killProcess(android.os.Process.myPid());
-ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.restartPackage("lab.sodino.errorreport");
-System.exit(0)
第二种忘记试了成功没,但是应该是一种不太提倡的方法。
方法一和三都是比较暴力的关闭应用,但是也简单有效干净,会将应用的整个进程都杀死,之后重启的应用将不再是这个进程下。
当时我自己追求的效果是在保有原进程,故有另外一套比较流行的方式,即每个Activity拥有一个收到广播自Destory的方法,然后在刚才这个地方发出广播通知所有的Activity自己走自销毁的流程。这样的方式比较遵循程序原来的生命周期,影响大概大约可能会比较小。。最主要是这样的方式就保留了原进程。
此时在这里可以通过startActivity自重启这个应用了。