Android_程序未处理异常的捕获与处理

1.简单介绍

对于程序抛出的未被捕获的异常,可能会导致程序异常退出,界面不友好且应记录关键错误信息上传至server。

这里主要使用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");
		}
		//记录下关键错误信息,能够存至本地并上传至server
		//LogUtil.bug(TAG, sb.toString());

		//打开新Activity友好界面提示
		//Util.showDialog(mContext, "时间:"+Util.formatSimpleDateAndTime(new Date()), "程序出现异常,请记录时间并提示开发者!");
		return true;
	}
}
时间: 2024-10-11 11:01:10

Android_程序未处理异常的捕获与处理的相关文章

Android程序捕获未处理异常,处理与第三方方法冲突时的异常传递

自己的android程序对异常进行了处理,用的也是网上比较流行的CrashHandler,代码如下,就是出现了未处理的异常程序退出,并收集收集设备信息和错误信息仪器保存到SD卡,这里没有上传到服务器. public class CrashHandler implements UncaughtExceptionHandler { public static final String TAG = "CrashHandler"; // CrashHandler 实例 private stat

asp.net捕获全局未处理异常的几种方法

通过HttpModule来捕获未处理的异常[推荐] 首先需要定义一个HttpModule,并监听未处理异常,代码如下: public void Init(HttpApplication context) { context.Error += new EventHandler(context_Error); } public void context_Error(object sender, EventArgs e) { //此处处理异常 HttpContext ctx = HttpContext

其他信息: 具有固定名称“Npgsql”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载。有关详细信息,请参阅内部异常

其他信息: 具有固定名称“Npgsql”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载.有关详细信息,请参阅内部异常 解决方法 在 App.config 的 configuration 中加入下面的内容  其中 红底部分是你调用的Npgsql的版本号 <system.data> <DbProviderFactories> <remove invariant="Npgsql"/> <add name="Npgs

JAVA学习-异常的捕获及处理

1.认识异常(了解) 异常指的是导致程序中断的一种指令流.那么下面先通过两个程序来比较程序出现异常与没有出现异常的区别. 范例:程序不出现异常 public class TestDemo { public static void main(String args[]) { System.out.println("1.除法计算开始.") ; System.out.println("2.除法计算:" + (10 / 2)) ; System.out.println(&q

java异常—检查异常(checked exception)和未检查异常(unchecked exception)

网易面试要我画异常的结构图,什么是检查异常,什么是非检查异常,我当时的表情是这样的,.我看过,忘了.没办法,继续看,写博客掌握. 先来看看异常的结构图,建议你结合JDK一起看. 可以看出异常的家族势力庞大,通常我们说的异常是包括exceptio和error. Exception家族我们恐怕见的不少,但是error家族我们可能就没什么印象了,下面我来说说这两个类的区别: Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题.大多数的错误与代码编写者执行的操作无关,而是表示代码运行

检查异常和未检查异常不同之处

public class ExceptionTypeTest { public void doSomething()throws ArithmeticException{ System.out.println(); } public static void main(){ ExceptionTypeTest ett = new ExceptionTypeTest(); ett.doSomething(); } } 问题1:上面的程序能否编译通过?并说明理由. 解答:能编译通过.分析:按照一般常理

Xamarin.Android-捕获未处理异常(全局异常)

一.前言 android中如果出现了未处理的异常,程序会闪退,这是非常不好的用户体验,很多用户会因此卸载APP,因此未处理的异常是应该尽力避免的. 有些很难避免的异常(如:IO.网络等),应在代码中进行捕捉并做相应的处理,以阻止程序崩溃闪退. 但是“没有任何程序是完美的”,况且各式各样的android终端也大大增加了异常的出现概率,就连强大的QQ.微信等不也会闪退嘛! 这时就需要全局捕获未处理的异常,并进行处理.(注意:本文中的处理方式并不能阻止APP闪退) 处理方式:收集异常信息.当前场景[时

黑马程序员_java异常概述

------- android培训.java培训.期待与您交流! ---------- 异常就是程序在编译和运行时出现的不正常情况.通过面向对象的编程思想将异常进行封装,以java类的形式对其进行描述. 一. 异常的体系1.• Throwable • Error • 通常出现重大问题如:运行的类不存在或者内存溢出等. • 不编写针对代码对其处理 • Exception • 在运行时运行出现的一切情况,需要在程序内部进行处理或者抛出. 为了记忆和书写方便,Error和Exception的子类有是由

黑马程序员_Java异常 Java常用库类

Java异常 1,异常的基本概念 异常是导致程序中断运行的一种指令流,它是在运行时期发生的不正常的情况,在Java中,一切的异常都秉着面向对象的设计思想,所有的异常都是以对象和类的形式存在的. 2,异常类的继承结构 在整个Java的异常结构中,实际上有两个最常用的类,Exception和Error,这两个类分别是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try....catch处理 Error:一般之的是JVM的错误,程序中无法处理. 3,Java的