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

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

  1. public class CrashHandler implements UncaughtExceptionHandler {
  2. public static final String TAG = "CrashHandler";
  3. private static CrashHandler INSTANCE = new CrashHandler();
  4. private Context mContext;
  5. private Thread.UncaughtExceptionHandler mDefaultHandler;
  6. private CrashHandler() {
  7. }
  8. public static CrashHandler getInstance() {
  9. return INSTANCE;
  10. }
  11. public void init(Context ctx) {
  12. mContext = ctx;
  13. mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
  14. Thread.setDefaultUncaughtExceptionHandler(this);
  15. }
  16. @Override
  17. public void uncaughtException(Thread thread, Throwable ex) {
  18. // if (!handleException(ex) && mDefaultHandler != null) {
  19. // mDefaultHandler.uncaughtException(thread, ex);
  20. // } else {
  21. // android.os.Process.killProcess(android.os.Process.myPid());
  22. // System.exit(10);
  23. // }
  24. System.out.println("uncaughtException");
  25. new Thread() {
  26. @Override
  27. public void run() {
  28. Looper.prepare();
  29. new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)
  30. .setMessage("程序崩溃了...").setNeutralButton("我知道了", new OnClickListener() {
  31. @Override
  32. public void onClick(DialogInterface dialog, int which) {
  33. System.exit(0);
  34. }
  35. })
  36. .create().show();
  37. Looper.loop();
  38. }
  39. }.start();
  40. }
  41. /**
  42. * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑
  43. *
  44. * @param ex
  45. * @return true:如果处理了该异常信息;否则返回false
  46. */
  47. private boolean handleException(Throwable ex) {
  48. if (ex == null) {
  49. return true;
  50. }
  51. // new Handler(Looper.getMainLooper()).post(new Runnable() {
  52. // @Override
  53. // public void run() {
  54. // new AlertDialog.Builder(mContext).setTitle("提示")
  55. // .setMessage("程序崩溃了...").setNeutralButton("我知道了", null)
  56. // .create().show();
  57. // }
  58. // });
  59. return true;
  60. }
  61. }

2、线程绑定异常处理类

  1. public class CrashHandlerActivity extends Activity {
  2. /** Called when the activity is first created. */
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main);
  7. CrashHandler crashHandler = CrashHandler.getInstance();
  8. crashHandler.init(this);  //传入参数必须为Activity,否则AlertDialog将不显示。
  9. // 创建错误
  10. throw new NullPointerException();
  11. }
  12. }

Demo下载地址:http://code.google.com/p/android-custom-view/downloads/list

转载地址: http://orgcent.com/android-uncaughtexceptionhandler-exception/ | 萝卜白菜的博客

Android使用UncaughtExceptionHandler捕获全局异常的更多相关文章

  1. Android捕获全局异常

    Android捕获全局异常 程序避免不了出现bug,导致程序崩溃,为了尽量不影响用户体验,可以全局捕获异常 效果图 异常捕获处理前 异常捕获处理后(将程序重新启动) 捕获异常的工具类 package ...

  2. Android应用捕获全局异常自定义处理

    [2016-06-30]最新的全局异常处理DRCrashHandler已经集成在DR_support_lib库中 具体请看: https://coding.net/u/wrcold520/p/DR_s ...

  3. 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常

    毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如 ...

  4. SpringBoot捕获全局异常

    1.创建GloableExceptionAop类捕获全局异常 package com.cppdy.exception; import org.springframework.web.bind.anno ...

  5. Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程

    Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程 一.捕获异常并重新启用线程 public class Testun { public static voi ...

  6. WebForm 在 Global.asax 中捕获全局异常

    /// <summary> /// 捕获全局异常 /// </summary> /// <param name="sender">sender& ...

  7. C# 捕获全局异常

    一.在Winform程序中捕获全局异常 在winfrom中我们需要了解Application对象中的两个事件 ①Application.ThreadException 事件--当UI线程中某个异常未被 ...

  8. SpringBoot学习笔记(二):SpringBoot访问静态文件、捕获全局异常、集成Thymeleaf、集成JSP

    SpringBoot访问静态文件 什么是静态文件? 不需要通过web容器去得到的文件,直接通过路径就能得到的文件,比如项目的css,js,img等文件. 所有的资源文件都应该在src/main/res ...

  9. C# WinForm捕获全局异常

    网上找的C# WinForm全局异常捕获方法,代码如下: static class Program { /// <summary> /// 应用程序的主入口点. /// </summ ...

随机推荐

  1. table第一行合并,其余行宽度失效问题

    <col>标签 http://www.w3school.com.cn/tags/tag_col.asp 由于表格中有一行合并过,所以其它没有合并的行的列宽就会平均化,对列宽的设置也会失效. ...

  2. 【HDU】6148 Valley Numer 数位DP

    [算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星201 ...

  3. JS之document对象(找元素、操作内容、操作属性、操作样式及4道例题)

    document对象 一.找元素 1.根据id找 示例: <input id = "a" type="button" value="找元素&qu ...

  4. Xmind 8 update5 破解

    Step 1. Download XMind Step 2. Run XMind at least once after installation, xmind will init the confi ...

  5. linux平台学x86汇编语言学习集合帖

    linux平台学x86汇编语言学习集合帖 linux平台学x86汇编(一):https://blog.csdn.net/shallnet/article/details/45543237 linux平 ...

  6. 基于 Arduino 开发板,这款插座是可编程且开源的

    基于 Arduino 开发板,这款插座是可编程且开源的 https://www.oschina.net/news/74861/open-source-socket https://github.com ...

  7. hadoop中setOutputKeyClass和setOutputValueClass里类型

    初学mapreduce programing,纠结一天的问题如下: job.setOutputKeyClass和job.setOutputValueClas在默认情况下是同时设置map阶段和reduc ...

  8. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  9. canvas制作柱形图/折线图/饼状图,Konva写动态饼状图

    制作饼状图 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  10. [How to]集成SQLite3

    1.简介 本文将介绍IOS的开发过程中如何集成Sqlite的方法,目前Sqlite的版本为3,所以我们称之为Sqlite3. 在本文中我将介绍Sqlite3的开发配置,本地Sqlite3数据库的建立通 ...