首页 > 代码库 > android捕获程序异常退出
android捕获程序异常退出
今天看到迅雷动漫里面一个CrashHandler 的类,我猜是崩溃处理类。进去一看,果然。顺便学习一下。
Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。
代码:
public class CrashHandler implements UncaughtExceptionHandler { private static final Logger LOG = Logger.getLogger(CrashHandler.class); private final Application mApplication; private Handler mUIHandler; private Thread mUiThread; public CrashHandler(Application app) { mApplication = app; mUIHandler = new Handler(); mUiThread = Thread.currentThread(); } @Override public void uncaughtException(Thread thread, Throwable e) { LOG.error(e); Throwable cause = e.getCause(); while (cause != null) { LOG.error(cause); cause = cause.getCause(); } writeCrashInfoToFile(e); if (Thread.currentThread() != mUiThread) { mUIHandler.post(new Runnable() { @Override public void run() { mApplication.onTerminate(); } }); } else { mApplication.onTerminate(); } } private void writeCrashInfoToFile(Throwable t) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); Throwable cause = t.getCause(); while (cause != null) { cause.printStackTrace(pw); cause = cause.getCause(); } String crashInfo = sw.toString(); pw.close(); try { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File file = mApplication.getApplicationContext().getExternalCacheDir(); if (file != null) { file = FileUtils.getFile(file, "crash"); file.mkdirs(); FileUtils.writeStringToFile(FileUtils.getFile(file, "crash.log"), crashInfo); } } } catch (IOException e) { LOG.warn(e); } } }两个可以看的参考:
http://blog.csdn.net/hehe9737/article/details/7662123
http://blog.csdn.net/wangbole/article/details/8161524
代码是自己的,虽然简单,算我是原创吧。不然,真的很难装逼。
android捕获程序异常退出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。