Android 解决因未捕获异常而崩溃的问题
来源:互联网 发布:杨国忠 知乎 编辑:程序博客网 时间:2024/05/05 18:17
在应用运行过程中,有很多异常可能会发生,一般情况我们会自己处理异常情况,但是也不能面面俱到,而我们希望在没有被捕获的异常发生的时候尽量做到不要让程序崩溃,并且需要在第一时间保存现场,必要时将log信息上传到server,以便在后期版本中修复。
如何处理未捕获的异常呢?
首先是定义一个类,我们取名为: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()); }}
0 0
- Android 解决因未捕获异常而崩溃的问题
- Android 解决因未捕获异常而崩溃的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- Android程序运行过程中因未捕获异常而异常终止
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问
- Android 未捕获异常crash崩溃日志的截取
- [Android]如何捕获未捕获的异常
- Android捕获崩溃异常
- Android捕获崩溃异常
- Android捕获崩溃异常
- 利用Android的UncaughtExceptionHandler捕获崩溃异常
- android未捕获异常的处理
- Android未捕获异常的处理
- android未捕获异常的处理方法
- 未捕获的异常
- UEditor上传图片时文件选择框延迟弹出的解决方法
- SASS安转及编译指南
- iOS 升级10.2后无法真机调试 Could not find Developer Disk Image
- FrameLayout中子控件位置设置疑惑
- 001_深入浅出mysql—存储引擎
- Android 解决因未捕获异常而崩溃的问题
- C语言再学习 -- 存储类型关键字
- TYPESDK手游聚合SDK服务端设计思路与架构之二:服务端设计
- PHP命名空间(Namespace)的使用详解
- J2EE规范jdbc使用到的设计模式
- 通达OA2015和2016链接sqlserver数据库的几种方式
- Java基础之==号、equals()和hashCode()区别
- Python中的异步IO和协程
- 《叫号机操作系统》-源代码