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. java线程的基本概念

    进程和线程 进程的诞生 操作系统中有2个任务A,B,任务A先执行,执行到一半需要io,因此要大量时间,在这个时间段内cpu是空闲的,浪费了资源,于是就有进程,当A暂时无法利用cpu,但是又不能销毁时, ...

  2. Part2-HttpClient官方教程-Chapter5-流利的API

    5.1. 易于使用的Facade API 使用之前注意引入相应Jar包或者Maven依赖 <dependency> <groupId>org.apache.httpcompon ...

  3. Python模块学习 - IPy

    简介 在IP地址规划中,涉及到计算大量的IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等,即便是专业的网络人员也要进行繁琐的计算,而IPy模块提供了专门针对IPV4地址与IPV6地址的类与工 ...

  4. 网络知识===wireshark抓包出现“TCP segment of a reassembled PDU”的解释(载)

    网上胡说八道,众说风云,感觉这篇还算靠谱点. 原文链接:http://blog.csdn.net/dog250/article/details/51809566 为什么大家看到这个以后总是会往MSS, ...

  5. 【LabVIEW技巧】代码块快速放置

    前言 之前的文章中介绍了如何使用QuickDrop来实现快速代码放置,今天我们来详细的聊一下如何进行代码块的快速放置. 正文 LabVIWE程序设计中,我们在架构层级总是进行重复性的编写.举一个例子: ...

  6. aspxgridview只编辑某一列然后更新

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IsAllowDeliver ...

  7. leetcode 之Single Number(14)

    这题并不难,但需要注意细节. ListNode* addTwo(ListNode *l1, ListNode *l2) { ListNode dummy(-); ; ListNode *prev = ...

  8. java获取项目路径,url路径

    我的web项目名iamgeModel. 工作空间在D盘 先获取url相关: 需要是HttpServletRequest request; 获取IP: request.getServerName() / ...

  9. js 获取html5的data属性

    我以前一直以为只能用jquery的data()来获取 哈哈 是我太弱了 <!DOCTYPE html> <html> <head> <title>dat ...

  10. BestCoder Round #85 前三题题解

    sum Accepts: 822 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...