建立android全局异常捕获类

本文介绍如何通过实现UncaughtExceptionHandler接口来捕获并处理应用运行时的不可预知异常,包括实例化全局异常捕获类、日志记录及在AndroidManifest.xml中的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当一个app在运行时,难免会发生一些不可预知的BUG,这时,如果不知道它因为什么错误导致的,那修复就比较困难了,所以,我们可以采用一个全局异常捕获类来把这些不可预知的BUG给捕获下来,然后写在我们的日志里或者上传到服务器,而这个全局异常捕获类怎么实现呢,通过实现UncaughtExceptionHandler接口来创建。


当某一线程发生未捕获的异常而即将终止时,java虚拟机会调用 Thread.getUncaughtExceptionHandler() 方法获取UncaughtExceptionHandler实例来处理异常,会在uncaughtException方法里处理,而我们如果实现UncaughtExceptionHandler接口,那就需要重写并在uncaughtException方法里做我们想做的事,当线程发生未捕获的异常时,java虚拟机调用 Thread.getUncaughtExceptionHandler() 方法就返回我们的实例了。

但正常是没有实现UncaughtExceptionHandler接口的,所以如果没有实现UncaughtExceptionHandler接口的话,一般由ThreadGroup 对象来处理,再或者交给系统默认的异常捕获程序。

代码实例:

public class AppException implements UncaughtExceptionHandler {
	
	@Override
	public void uncaughtException(Thread thread, Throwable e) {
		//字节输出流
		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
		//
		PrintStream ps = new PrintStream(byteOut);
		//把错误信息输入进流里面
		e.printStackTrace(ps);
		//返回字符串
		String error = new String(byteOut.toByteArray());
		//这里我添加了时间日期,这样好区分
		String errorMessage = getTime() + "\n" + error + "\n";
		//通过SharedPreferences来保存
		SaveUtil.getInstance().setValue("LastException", errorMessage);
		
	}
	private String getTime() {
		SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String time = s.format(new Date());
		return time;
	}

}
下一步就是实例化这个全局异常捕获类了,我是在Application的实现类里实例化全局异常捕获类的


@Override
	public void onCreate() {
		super.onCreate();
		appexception = AppException.getInstance();
		appexception.init(this);
	}
如果是通过Application来实例化全局异常类的话,别忘记在AndroidManifest.xml里配置Application

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值