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);