2.代码实现" />
当前位置: 代码迷 >> Android >> 2.代码实现
  详细解决方案

2.代码实现

热度:51   发布时间:2016-04-28 04:23:19.0
Android_程序未处理异常的捕获与处理

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("\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;	}}

1楼yanglfree1小时前
原来如此
  相关解决方案