• Android使用UncaughtExceptionHandler捕获全局异常


        Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。

    1、异常处理类,代码如下:

    public class CrashHandler implements UncaughtExceptionHandler {
    public static final String TAG = "CrashHandler";
    private static CrashHandler INSTANCE = new CrashHandler();
    private Context mContext;
    private Thread.UncaughtExceptionHandler mDefaultHandler;
    
    private CrashHandler() {
    }
    
    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, Throwable ex) {
    // if (!handleException(ex) && mDefaultHandler != null) {
    // mDefaultHandler.uncaughtException(thread, ex);
    // } else {
    // android.os.Process.killProcess(android.os.Process.myPid());
    // System.exit(10);
    // }
    System.out.println("uncaughtException");
    
    new Thread() {
    @Override
    public void run() {
    Looper.prepare();
    new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)
    .setMessage("程序崩溃了...").setNeutralButton("我知道了", new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    System.exit(0);
    }
    })
    .create().show();
    Looper.loop();
    }
    }.start();
    }
    
    /**
    * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑
    *
    * @param ex
    * @return true:如果处理了该异常信息;否则返回false
    */
    private boolean handleException(Throwable ex) {
    if (ex == null) {
    return true;
    }
    // new Handler(Looper.getMainLooper()).post(new Runnable() {
    // @Override
    // public void run() {
    // new AlertDialog.Builder(mContext).setTitle("提示")
    // .setMessage("程序崩溃了...").setNeutralButton("我知道了", null)
    // .create().show();
    // }
    // });
    
    return true;
      }
    }

    2、线程绑定异常处理类

    public class CrashHandlerActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    CrashHandler crashHandler = CrashHandler.getInstance(); 
    crashHandler.init(this); //传入参数必须为Activity,否则AlertDialog将不显示。
    // 创建错误
    throw new NullPointerException();
    }
    }
  • 相关阅读:
    Systemd程序及相关命令
    深入理解SELinux
    Linux系统常见内核问题修复(转发)
    CentOS6.8单用户模式下修改密码
    CentOS6启动流程
    linux中的软、硬链接
    Linux中计划任务、周期性任务设置
    CentOS7.3将网卡命名方式设置为传统方式
    js判断字符串是否有下划线
    判断是否是微信打开
  • 原文地址:https://www.cnblogs.com/yema/p/3573697.html
Copyright © 2020-2023  润新知