android 全局异常捕获

package cn.cmri.koudai.utilities.tag;

import java.io.File;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Calendar;

import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.content.Intent;

@SuppressLint("SdCardPath")
public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler{
	
	private static MyUncaughtExceptionHandler instance;
	
	//private static final String ERROR_FILE_PATH = "/mnt/sdcard/koudai/";
	private static final String ERROR_FILE_NAME = "errorMsg.txt";
	//public static final String PATH = ERROR_FILE_PATH + ERROR_FILE_NAME;

	private Context con;
	private UncaughtExceptionHandler systemHandler;
	
	@SuppressWarnings("deprecation")
	@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		/*Intent intent = new Intent();  
		// 参数1:包名,参数2:程序入口的activity  
		intent.setClassName("com.hp.cmcc.moa", "com.hp.cmcc.moa.MoaActivity");  
		PendingIntent restartIntent = PendingIntent.getActivity(con, 0,  intent, Intent.FLAG_ACTIVITY_NEW_TASK);
		AlarmManager mgr = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE);  
		mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000,  restartIntent);*/
		ex.printStackTrace();
		String error = con.getFilesDir().getAbsolutePath();
		try {
			File f = new File(error);
			if(!f.exists())
				f.mkdirs();
			f = new File(error, ERROR_FILE_NAME);
			StringBuffer line = new StringBuffer("");
			if(f.exists()){
				FileInputStream in = new FileInputStream(f);
				byte[] b = new byte[in.available()];
				in.read(b);
				in.close();
				line.append(new String(b));
			}
				
			PrintStream out = new PrintStream(f);
			ex.printStackTrace(out);
			out.flush();
			out.append("----JAVA SYSTEM INFO END----\n----OTHER INFO ----\nERROR HAPPEND TIME: " 
					+ Calendar.getInstance().getTime().toLocaleString()
					+ "\nSYSTEM.CURRENTTIMEMILLIS:"+ System.currentTimeMillis());
			out.append("\n-----------------------------------\n");
			if(line.toString() != "null")
				out.append(line.toString());
			out.flush();
			out.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		//android.os.Process.killProcess(android.os.Process.myPid());
        
        if(systemHandler != null){
        	systemHandler.uncaughtException(thread, ex);
        }
        System.exit(1);
	}
	
	private MyUncaughtExceptionHandler(Application con, UncaughtExceptionHandler systemHandler){
		this.con = con;
		this.systemHandler = systemHandler;
	}
	
	public static MyUncaughtExceptionHandler getInstance(Application con, UncaughtExceptionHandler systemHandler){
		if(instance == null)
			instance = new MyUncaughtExceptionHandler(con, systemHandler);
		return instance;
	}
	
	public  String getFilePath(){
		return con.getFilesDir().getAbsolutePath() + "/" + ERROR_FILE_NAME;
	}
}


在Application中注册

package cn.cmri.koudai.utilities.app;

import java.lang.Thread.UncaughtExceptionHandler;

import cn.cmri.koudai.utilities.tag.MyUncaughtExceptionHandler;
import android.app.Application;

public class BaseApplication extends Application {
	private static BaseApplication instance;
	@Override
	public void onCreate() {
		super.onCreate();
		instance = this;
		UncaughtExceptionHandler defaultUncaught = Thread.getDefaultUncaughtExceptionHandler();
		Thread.setDefaultUncaughtExceptionHandler(MyUncaughtExceptionHandler.getInstance(this, defaultUncaught));
	}
	
	public static BaseApplication getInstance(){
		return instance;
	}
}



以上是全部代码  主要用到的就是UncaughtExceptionHandler这个类 ,在uncaughtException(Thread thread, Throwable ex)这个方法中,可以对捕获到的异常进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值