Android中的异常处理 CrashHandler
16lz
2021-01-23
android中如果出现未捕获异常就会让应用程序crash掉,给用户的提示仅仅是该应用已崩溃,很不友好,自己定义一个UncaughtExceptionHanlder来捕获UI线程上的Exception,使用AlertDialog的方式展示出来,可以方便测试,也可以提升用户体验
package com.tcl.navigator.common;
import java.lang.Thread.UncaughtExceptionHandler;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Looper;
import android.util.Log;
/**
*
* @author peizc 2012-11-23
* 默认处理机制
*/
public class CrashHandler implements UncaughtExceptionHandler {
private static final String FLAG = "CrashHandler";
private Context mContext;
private static CrashHandler INSTANCE = new CrashHandler();
private Thread.UncaughtExceptionHandler mDefaultHandler;
public static CrashHandler getInstance() {
return INSTANCE;
}
public void init(Context ctx) {
mContext = ctx;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, final Throwable ex) {
// TODO Auto-generated method stub
Log.e(FLAG, ex.toString());
new Thread() {
public void run() {
Looper.prepare();
new AlertDialog.Builder(mContext).setTitle("提示")
.setCancelable(false).setMessage("Error...\n" + ex.toString())
.setNeutralButton("I know",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
ex.printStackTrace();
System.exit(0);
}
}).create().show();
Looper.loop();
};
}.start();
}
}
更多相关文章
- Android EditText 为空提示 密码隐藏
- 【转】android AsyncTask 为 多任务 多线程 解决方案
- Android:只需一句话解决读写权限授予后仍提示 Permission denied
- (8 Android) 用户界面UI设计
- 更新Anadroid SDK Tooks之后,Eclipse提示No update were found
- android 延时 不用另起线程或timertask
- Eclipse For Android 代码自动提示功能