您的位置:首页 > 其它

收集未捕获异常提示后重启程序

2013-01-29 11:36 447 查看
public class UEHandler implements Thread.UncaughtExceptionHandler {
private MyApp softApp;
private Context context;

public UEHandler(MyApp app,Context context) {
softApp = app;
this.context = context;
}

public void uncaughtException(Thread thread, Throwable ex) {
// fetch Excpetion Info

ex.printStackTrace();
// print
long threadId = thread.getId();
//Log.d("ANDROID_LAB", "Thread.getName()=" + thread.getName() + " id=" + threadId + " state=" + thread.getState());
//Log.d("ANDROID_LAB", "Error[" + info + "]");
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(context, "很抱歉,程序出现异常,即将退出。", Toast.LENGTH_LONG).show();

Looper.loop();

}
}.start();
try {
thread.sleep(3*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (threadId != 1) {
// 此处示例跳转到汇报异常界面。
Intent intent = new Intent(softApp, splash.class);
softApp.startActivity(intent);
} else {
// 此处示例发生异常后,重新启动应用
Intent intent = new Intent(softApp, splash.class);
// 如果<span style="background-color: rgb(255, 255, 255); ">没有NEW_TASK标识且</span>是UI线程抛的异常则界面卡死直到ANR
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
softApp.startActivity(intent);
// write 2 /data/data/<app_package>/files/error.log
// kill App Progress
android.os.Process.killProcess(android.os.Process.myPid());
}
}

}


public void onCreate() {
super.onCreate();
need2Exit = false;
ueHandler = new UEHandler(this,getApplicationContext());
Thread.setDefaultUncaughtExceptionHandler(ueHandler); // 程序崩溃时触发线程
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: