捕获全局异常并输出到SD卡上

1、新建一个类UEHandler实现java.lang.Thread.UncaughtExceptionHandler接口。

2、重写public void uncaughtException(Thread thread, Throwable ex)方法,其中ex对象即捕获到的全局异常。可以在此将错误信息打印至SD卡文件中。

3、在Manifast.xml文件中定义的application类中配置UEHandler:UEHandler ueHandler = new UEHandler(this);  Thread.setDefaultUncaughtExceptionHandler(ueHandler);

 

具体关键代码如下:

UEHandler.java
   

@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		String info = null;
		ByteArrayOutputStream baos = null;
		PrintStream printStream = null;
		try {
			baos = new ByteArrayOutputStream();
			printStream = new PrintStream(baos);
			ex.printStackTrace(printStream);
			byte[] data = baos.toByteArray();
			info = new String(data);
			data = null;
			LogUtil.addLog(info);
			// 可以跳转至错误提示页面
			android.os.Process.killProcess(android.os.Process.myPid());
		} catch (Exception e) {
			Log.e("UEHandler", e.getMessage(), e);
		} finally {
			try {
				if (printStream != null) {
					printStream.close();
				}
				if (baos != null) {
					baos.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
LogUtil.java类
package com.fsti.android.util;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;

import android.os.Environment;
import android.util.Log;

public class LogUtil {
	private static final String fileDir = "/sdcard/3glife/";
	private static String fileName = "log.txt";
	
	public static boolean addLog(String log) {
		if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) return false;
		try {
			log = "\r\n" + DateUtil.formatDateDefault(new Date()) + "==>" + log;
			fileName = "log-" + DateUtil.formatDate(new Date(), "yyyy-MM-dd") + ".txt";
			File dir = new File(fileDir);
			File file = new File(fileDir + fileName);
			if(!dir.exists()) {
				dir.mkdir();
			}
			if(!file.exists()) {
				file.createNewFile();
			}
			FileOutputStream fos = new FileOutputStream(file);
			fos.write(log.getBytes());
			fos.close();
		} catch (Exception e) {
			Log.e("LogUtil", e.getMessage());
			return false;
		}
		return true;
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值