Android 捕获系统全局异常

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

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

[java] view
plain
copy

  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、线程绑定异常处理类

[java] view
plain
copy

  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/
| 萝卜白菜的博客

时间: 2024-08-03 01:25:20

Android 捕获系统全局异常的相关文章

iOS 捕获系统外异常

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐. 工欲善其事,必先

SpringBoot2.0 基础案例(03):配置系统全局异常映射处理

一.异常分类 这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常. 1.业务异常 业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性.常见的业务异常提示:1)请输入xxx2)xxx不能为空3)xxx重复,请更换 2.系统异常 系统异常主要是一些不可预见性异常,处理系统异常,可以让展示出一个友好的用户界面,不易给用户造成反感.如果是一个金融类系统,在用户界面出现一个系统异常的崩溃界面,很有可能直接导致用户流失.常见的系统异常提示:1)页面丢失4

在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值)

转载自: http://blog.csdn.net/jdsjlzx/article/details/7606423

【转】 Android自定义捕获Application全局异常

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信息,并发送这些信息到服务器供开发者分析和调试程序. 我们先建立一个crash项目,项目结构如图: 在MainActivity.ja

VB.net 捕获项目全局异常

在项目中添加如下代码:新建窗口来显示异常信息. Namespace My '全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 '添加后还需要一个From用来显示错误.如果到这步还不会则需要先打好基础啦 '======================================================== '以下事件可用于MyApplication: ' 启动:应用程序启动时,在创建启动窗体之前引发. ' 关闭:所有申请表格关闭后提出. 如果应用

捕获全局异常UncaughtExceptionHandler

标签:捕获全局异常,UncaughtExceptionHandler ========================网上相关博客======================== 参考:http://blog.csdn.net/jdsjlzx/article/details/7606423 Android自定义捕获Application全局异常 http://git.oschina.net/oschina/android-app 大家可以参考. 大家都知道,现在安装Android系统的手机版本和

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

[2016-06-30]最新的全局异常处理DRCrashHandler已经集成在DR_support_lib库中 具体请看: https://coding.net/u/wrcold520/p/DR_support_lib/git/tree/master [2016-06-28] 1 增加log4j的支持[2016-06-28] 2 增加全局异常处理(可自定义程序崩溃提示消息,自定义发送错误报告到服务器)[2016-06-28] 3 增加两种应用退出方法:① appExit,结束掉所有Acitiv

Android应用源码之捕获全局异常

Android应用源码之捕获全局异常 本项目就是一个简单的全局异常捕捉例子,捕捉到异常以后可以把异常信息写入文件以供后来分析或者用友好的方式进行提示后再退出程序. 下载地址:http://www.devstore.cn/code/info/630.html

Android -- 使用UncaughtExceptionHandler捕获全局异常

在集成了统计SDK(友盟统计,百度统计等)之后,有一个非常有利于测试的功能:错误分析!此功能能够将程序在运行中碰到的崩溃(runtimeException)问题反馈到服务器,帮助开发者改善产品,多适配机器. 然而在公司android开发中不集成这些SDK,那应该怎么实现这样的功能呢?下面让我们来看下如何使用UncaughtExceptionHandler来捕获异常. 首先实现创建一个类,实现UncaughtExceptionHandler接口.代码如下: public class CrashHa