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)这个方法中,可以对捕获到的异常进行处理。