开篇就借用一下清代黄宗羲的《明儒学案》中的一句话与各位共勉——“学则智,不学则愚”。我们一起加油ヾ(◍°∇°◍)ノ゙!!
在做项目的时候,当程序出现异常时,如果能够及时捕获到并上传到服务器,那么这样我们就能够看到异常日志信息了。本文就来实现这个功能。
如果某个应用安装的Thread.UncaughtExceptionHandler未移交给默认的Thread.UncaughtExceptionHandler,则当出现未捕获的异常时,系统不会终止应用,即不会出现系统默认的“抱歉,xxx应用已停止运行”。因此,我们就可以对应用的异常进行全局捕获,从而将异常保存下来。首先,新建CrashHandler类并实现Thread.UncaughtExceptionHandler接口,并重写public void uncaughtException(Thread thread, Throwable ex)方法,当产生异常时就会转入该函数处理。
/**
* 当UncaughtException发生时会转入该函数来处理
*/
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (!handleException(ex) && mDefaultHandler != null) {
//如果用户没有处理则让系统默认的异常处理器来处理
mDefaultHandler.uncaughtException(thread, ex);
} else {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
//退出程序
ExitAppUtils.getInstance().exit();
}
最后一行代码用来退出程序,之前在网上查找资料,退出程序的方式多为:android.os.Process.killProcess(android.os.Process.myPid())、System.exit(0)或者System.exit(2),但在实际操作中,程序并不会完美退出,而是会多次执行handleException()方法。本文的ExitAppUtils()类使用List来对APP的Activity进行管理,现将所有的Activity销毁,最后实现程序的退出,该类的代码将在本文末尾给出。
正常情况下,uncaughtException()方法会调用handleException()方法对异常进行处理,之后睡两秒程序退出。我们也可以在handleException(