Android 解决因未捕获异常而崩溃的问题
2016-12-27 15:10
387 查看
在应用运行过程中,有很多异常可能会发生,一般情况我们会自己处理异常情况,但是也不能面面俱到,而我们希望在没有被捕获的异常发生的时候尽量做到不要让程序崩溃,并且需要在第一时间保存现场,必要时将log信息上传到server,以便在后期版本中修复。
如何处理未捕获的异常呢?
首先是定义一个类,我们取名为:CrashHandler,然后实现一个接口 java.lang.Thread.UncaughtExceptionHandler,要实现该接口里面的uncaughtException(Thread t, Throwable e)方法 ,在这个函数里面,我们可以做一些处理,例如将异常信息保存到sdcard上的某个位置,或者提示用户异常出现等等一些操作等。
代码:
其中Thread.setDefaultUncaughtExceptionHandler(this);是最关键的一行代码了。
用法:
其次,在Application的onCreate()方法中进行注册:
如何处理未捕获的异常呢?
首先是定义一个类,我们取名为:CrashHandler,然后实现一个接口 java.lang.Thread.UncaughtExceptionHandler,要实现该接口里面的uncaughtException(Thread t, Throwable e)方法 ,在这个函数里面,我们可以做一些处理,例如将异常信息保存到sdcard上的某个位置,或者提示用户异常出现等等一些操作等。
代码:
/** * crash异常log捕获 * 捕获到的log会保存到sdcard文件里 * @author willkong */ public class CrashHandler implements UncaughtExceptionHandler { private static CrashHandler instance; private Context context; /** 系统默认的UncaughtException处理类 */ private Thread.UncaughtExceptionHandler defaultHandler; // 单例 public static CrashHandler getInstance() { if (instance == null) { instance = new CrashHandler(); } return instance; } // 初始化 public void init(Context context) { this.context = context; defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } @Override public void uncaughtException(Thread arg0, Throwable arg1) { DownloadManager.getInstance().clearNotification(); if (!handleException(arg1) && defaultHandler != null) { // 如果用户没有处理则让系统默认的异常处理器来处理 defaultHandler.uncaughtException(arg0, arg1); } else { // 退出进程 System.exit(16); } } // 处理异常 private boolean handleException(Throwable ex) { if (ex == null) { return true; } ex.printStackTrace(); //保存log信息到本地文件 Methods.logCrashOnFile(context, ex); // 等待1s try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } // 关闭进程 int nPid = android.os.Process.myPid(); android.os.Process.killProcess(nPid); return true; }
其中Thread.setDefaultUncaughtExceptionHandler(this);是最关键的一行代码了。
用法:
其次,在Application的onCreate()方法中进行注册:
public class ExcApplication extends Application { @Override public void onCreate() { CrashHandler.getInstance().init(getApplicationContext()); } }
相关文章推荐
- Android 解决因未捕获异常而崩溃的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- 【android学习】onSaveInstanceState使用详解-之解决问题:android程序崩溃后,app异常
- Android 关于上文中第三方开源PinnedSectionListView异常崩溃报错问题解决方案
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- 关于Android中多线程中异常捕获出现的问题和解决办法
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问
- Android-小小设置永久解决程序因为未捕获异常而异常终止
- android真机 连接PC端服务器调试 connection refused异常问题解决
- Android中发送网络请求,弹出Dialog崩溃问题解决
- Android应用崩溃后异常捕获并重启
- Android UncaughtExceptionHandler捕获崩溃异常
- Android应用崩溃后异常捕获并重启
- Android应用崩溃后异常捕获并重启
- Android应用崩溃后异常捕获并重启
- 利用Android UncaughtExceptionHandler捕获崩溃异常
- Android UncaughtExceptionHandler捕获线程崩溃异常