Android_程序未处理异常的捕获与处理
来源:互联网 发布:程序员显示器 知乎 编辑:程序博客网 时间:2024/05/27 09:47
1.简介
对于程序抛出的未被捕获的异常,可能会导致程序异常退出,界面不友好且应记录关键错误信息上传至服务器。这里主要使用UncaughtExceptionHandler
2.代码实现
public class CrashHandler implements UncaughtExceptionHandler {public static final String TAG = CopyOfCrashHandler.class.getSimpleName();// 系统默认的UncaughtException处理类private Thread.UncaughtExceptionHandler mDefaultHandler;private static CopyOfCrashHandler instance;private Context mContext;private CopyOfCrashHandler() {}/** 获取CrashHandler实例 ,单例模式 */public static CopyOfCrashHandler getInstance() {if (instance == null)instance = new CopyOfCrashHandler();return instance;}/** * 初始化 */public void init(Context context) {mContext = context;//记录下默认的UncaughtExceptionHandlermDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();//Thread.setDefaultUncaughtExceptionHandler(this);}/** * 当UncaughtException发生时会转入该函数来处理 */@Overridepublic void uncaughtException(Thread thread, Throwable ex) {if (!handleException(thread, ex) && mDefaultHandler != null) {// 如果用户没有处理则让系统默认的异常处理器来处理mDefaultHandler.uncaughtException(thread, ex);} else {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}android.os.Process.killProcess(android.os.Process.myPid());System.exit(1);}}/** * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. * * @param ex * @return true:如果处理了该异常信息;否则返回false. */private boolean handleException(Thread thread, Throwable ex) {if (ex == null) {return false;}StringBuffer sb = new StringBuffer();sb.append(thread + ", Cause By:" + ex).append("\r\n\r\n");StackTraceElement[] elements = ex.getStackTrace();for (int i = 0; i < elements.length; i++) {sb.append(elements[i].toString() + "\r\n");}//记录下关键错误信息,可以存至本地并上传至服务器//LogUtil.bug(TAG, sb.toString());//打开新Activity友好界面提示//Util.showDialog(mContext, "时间:"+Util.formatSimpleDateAndTime(new Date()), "程序出现异常,请记录时间并提示开发人员!");return true;}}
0 0
- Android_程序未处理异常的捕获与处理
- Android_程序未处理异常的捕获与处理
- AppDomain的两个小技巧(程序运行完毕和未处理异常的处理) 捕获未处理异常
- C# 捕获未处理的异常
- WPF捕获未处理的异常
- 未处理异常的处理
- 捕获asp.net下的未处理异常
- C# WinForm捕获未处理的异常
- C# WinForm捕获未处理的异常
- C# WinForm捕获未处理的异常
- C#_WinForm 统一捕获未处理的异常
- 捕获asp.net下的未处理异常
- C# WinForm捕获全局异常(捕获未处理的异常)
- 异常的捕获与处理
- 异常的捕获与处理
- C#捕获未处理异常
- nodejs 捕获未处理异常
- 如何处理Windows Forms程序中未处理的异常
- cocos2dx移植android问题
- 茶树菇slimxi居家减肥食谱
- POJ 2251 Dungeon Master
- cocos2dx之Label实现换行
- MTK-当修改一些代码时,使用什么编译命令可以最有效率
- Android_程序未处理异常的捕获与处理
- 程序员的王牌面试诀窍
- 如何在你的iPad上创建VPN
- LeetCode_Subsets II
- 机制与策略
- 如何解决No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
- C#抽象类和接口的区别
- mongodb
- hdu2029 Palindromes _easy version