未知错误 主要处理类
</pre><pre name="code" class="java">package com.example.crash.service;
import java.lang.Thread.UncaughtExceptionHandler;
import android.content.Context;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast;
/**
* 未知异常捕捉
* @author lixkb
*
*/
public class CrashHandler implements UncaughtExceptionHandler {
private final static String tAG = "CRASHHANDLER";
//UncaughtExceptionHandler 实例
private Thread.UncaughtExceptionHandler mDefaultHandler;
//CrashHandler 单例
private static CrashHandler instance = new CrashHandler();
//context
private Context mContext;
public static CrashHandler getInstance() {
return instance;
}
public void init(Context context) {
this.mContext = context;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
//设置程序默认处理器
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (!handleException(ex) && mDefaultHandler != null){
mDefaultHandler.uncaughtException(thread, ex);
//Log.i(tAG, ex.toString());
}else {
//Toast.makeText(mContext, "no ex", Toast.LENGTH_LONG).show();
}
//退出程序
/* android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1); */
}
private boolean handleException(final Throwable ex) {
if (ex == null) {
return false;
}
// 使用Toast来显示异常信息
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(mContext, "很抱歉,程序出现异常,即将退出.", Toast.LENGTH_LONG)
.show();
Log.i(tAG, ex.toString());
try {
sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Looper.loop();
}
}.start();
//可以将ex的信息写入 文件也可以
return true;
}
}
application
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());