java处理未捕获异常

android应用经常会有异常崩溃发生,如NullPointerExcepiton等,崩溃之后程序后续代码将不被执行。如果我们在onPause、onStop或者onDestory中有一些必须要执行的逻辑,应用crash后这些逻辑又不被执行,那怎么办呢?这里可以用UncaughtExceptionHandler接口来处理。

首先实现这个接口:

package com.example

import java.lang.Thread.UncaughtExceptionHandler;

import android.app.Activity;
import android.util.Log;

public class CrashHandler implements UncaughtExceptionHandler {
	
	private static final String TAG = "CrashHandler";

	private static CrashHandler mintance;
	private Thread.UncaughtExceptionHandler mDefaultHandler;
	private Activity mactivity;

	private CrashHandler() {
	}
	
	// 获得单例
	public static CrashHandler getInstance() {
		if (mintance == null) {
			mintance = new CrashHandler();
		}
		return mintance;
	}
	
	public void init(Activity activity) {
		Log.v(TAG, TAG+" init");
		mactivity = activity;
		mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();    // 获取默认的异常处理函数
		Thread.setDefaultUncaughtExceptionHandler(this);
	}
	
	public void Destory(){
		Log.v(TAG, TAG+" Destory");
		mintance = null;
	}

	@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		// TODO Auto-generated method stub
		if ( handleException(ex) ) {
			//do something
			mDefaultHandler.uncaughtException(thread, ex);    
		}
	}
	
	private boolean handleException(final Throwable ex) {   
		if (ex == null) {   
            return false;   
        }   
		Log.e( TAG, mactivity.toString() +" " + ex.getStackTrace() );
		return true;
	}

}


在activity中实例化这个类:

CrashHandler crashHandler = CrashHandler.getInstance();    
        crashHandler.init(this);   








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值