zoukankan      html  css  js  c++  java
  • Android_程序未处理异常的捕获与处理

    1.简介
    
    对于程序抛出的未被捕获的异常,可能会导致程序异常退出,界面不友好且应记录关键错误信息上传至服务器。这里主要使用UncaughtExceptionHandler

    我们在进入Activity的onCreate函数的时候,设置一下处理未捕获异常 

    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;
    		//记录下默认的UncaughtExceptionHandler
    		mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
    		//
    		Thread.setDefaultUncaughtExceptionHandler(this);
    	}
    
    	/**
    	 * 当UncaughtException发生时会转入该函数来处理
    	 */
    	@Override
    	public 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("
    
    ");
    
    		StackTraceElement[] elements = ex.getStackTrace();
    		for (int i = 0; i < elements.length; i++) {
    			sb.append(elements[i].toString() + "
    ");
    		}
    		//记录下关键错误信息,可以存至本地并上传至服务器
    		//LogUtil.bug(TAG, sb.toString());
    		
    		//打开新Activity友好界面提示
    		//Util.showDialog(mContext, "时间:"+Util.formatSimpleDateAndTime(new Date()), "程序出现异常,请记录时间并提示开发人员!");
    		return true;
    	}
    }
    

      

  • 相关阅读:
    MySQL多实例配置
    MySQL8.0启动和关闭流程
    MySQL8.0初始化配置方式 ——维护使用
    MySQL多种连接方式
    MySQL 8.0用户及安全管理
    MySQL 5.7安装及版本升级到8.0
    五十六、linux 编程——UDP 编程模型
    五十五、linux 编程——TCP 连接和关闭过程及服务器的并发处理
    五十四、linux 编程——TCP 编程模型
    五十三、linux 编程——TCP 编程基本介绍
  • 原文地址:https://www.cnblogs.com/childhooding/p/4534032.html
Copyright © 2011-2022 走看看