1.自定义一个类(MaApp)继承Application

2.在清单文件中的Application选项菜单对应的name属性中添加MyApp

3.重写application中的onCreate方法

4.自定义一个类(MyCrashHandler) 实现UncaughtExceptionHandler实现其中的uncaughtException方法

5.将MyCrashHandler 采用单例设计模式 加入同步代码块

6.在MyApp类中的主线程把这个异常捕获设置进去

1 Thread.currentThread().setUncaughtExceptionHandler(MyCrashHandler.getInstance(getApplicationContext()));

7.异常的处理在MyCrashHandler中的uncaughtException中处理

上代码

MyApp类

 1 package cn.itcast.crash;
2
3 import java.lang.Thread.UncaughtExceptionHandler;
4
5 import android.app.Application;
6
7 public class MyApp extends Application {
8
9
10 /**
11 * 应用程序 的进程在第一次被创建的时候 执行的方法
12 */
13 @Override
14 public void onCreate() {
15
16 Thread.currentThread().setUncaughtExceptionHandler(MyCrashHandler.getInstance(getApplicationContext()));
17
18
19
20 super.onCreate();
21 }
22
23
24
25 }

MyCrashHandler类

 1 package cn.itcast.crash;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.PrintWriter;
6 import java.io.StringWriter;
7 import java.lang.Thread.UncaughtExceptionHandler;
8 import java.lang.reflect.Field;
9
10 import android.content.Context;
11 import android.content.pm.PackageInfo;
12 import android.os.Build;
13 import android.os.Environment;
14
15 public class MyCrashHandler implements UncaughtExceptionHandler {
16 private MyCrashHandler() {
17 };
18 private static UncaughtExceptionHandler defaultHandler;
19 //定义一个系统的默认的异常处理的handler
20 private static MyCrashHandler myCrashHandler;
21 private static Context mContext;
22
23 public synchronized static MyCrashHandler getInstance(Context context) {
24 if (myCrashHandler == null) {
25 myCrashHandler = new MyCrashHandler();
26 mContext = context;
27 defaultHandler = Thread.currentThread().getDefaultUncaughtExceptionHandler();
28 }
29 return myCrashHandler;
30 }
31
32 /**
33 * 当某一个异常 没有代码显示的捕获的时候, 系统会调用 默认的异常处理的代码 处理这个异常
34 */
35 @Override
36 public void uncaughtException(Thread thread, Throwable ex) {
37 System.out.println("出现了异常,但是被哥捕获了");
38 StringWriter wr = new StringWriter();
39 PrintWriter pw = new PrintWriter(wr);
40 ex.printStackTrace(pw);
41 StringBuilder sb = new StringBuilder();
42
43 try {
44 PackageInfo packinfo = mContext.getPackageManager().getPackageInfo(
45 mContext.getPackageName(), 0);
46 String version = packinfo.versionName;
47 sb.append("错误信息:\n");
48 sb.append("版本号:" + version + "\n");
49
50 String errorlog = wr.toString();
51 sb.append(errorlog);
52 sb.append("\n");
53
54 // 获取当前手机操作系统的信息.
55 Field[] fields = Build.class.getDeclaredFields();
56 for (Field field : fields) {
57 field.setAccessible(true);// 暴力反射,可以获取私有成员变量的信息
58 String name = field.getName();
59 String value = field.get(null).toString();
60 sb.append(name+"="+value+"\n");
61 }
62 String time ="time:"+ System.currentTimeMillis();
63 sb.append(time);
64 String log = sb.toString();
65 File file = new File(Environment.getExternalStorageDirectory(),"error.log");
66 FileOutputStream fos = new FileOutputStream(file);
67 fos.write(log.getBytes());
68 fos.flush();
69 fos.close();
70
71 android.os.Process.killProcess(android.os.Process.myPid());
72 //调用系统的默认的异常处理方法 处理这个异常
73 defaultHandler.uncaughtException(thread, ex);
74
75 } catch (Exception e) {
76 e.printStackTrace();
77 }
78
79 }
80
81 }

Android的应用程序的异常处理2的更多相关文章

  1. Android Camera 相机程序编写

    Android Camera 相机程序编写 要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: <uses-per ...

  2. Android系统的“程序异常退出”[转]

    在应用运行过程中,有很多异常可能会发生,而我们希望在异常发生的时候第一时间的保存现场. 如何处理未捕获的异常呢? 首先我们要实现一个接口  java.lang.Thread.UncaughtExcep ...

  3. pc端和android端应用程序测试有什么区别?(ps面试题)

    pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...

  4. 分享50款 Android 移动应用程序图标【下篇】

    在这个移动程序流行的时代,持续增长的应用程序经济充满了商业机遇.任何对应用程序设计感兴趣的人,将会喜欢上这里的50个独特的 Android 应用程序图标.这些例子中的图标能够让应用程序的设计更具吸引力 ...

  5. 分享50款 Android 移动应用程序图标【上篇】

    在这个移动程序流行的时代,持续增长的应用程序经济充满了商业机遇.任何对应用程序设计感兴趣的人,将会喜欢上这里的50个独特的 Android 应用程序图标.这些例子中的图标能够让应用程序的设计更具吸引力 ...

  6. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端

    Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...

  7. 解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...

  8. 解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...

  9. 如何开发Android Wear应用程序

    Android Wear是连接安卓手机和可穿戴产品的一个平台.自从今年上半年发布以来,Android Wear获得了大量关注,既有来自消费者的关注,也有来自开发商的关注,后者希望自己的应用程序已经准备 ...

随机推荐

  1. Oracle EBS-SQL (WIP-2):检查非标任务没挂自己本身.sql

    SELECT WE.WIP_ENTITY_NAME, MSI.SEGMENT1, MSI.DESCRIPTION, WDJ.CLASS_CODE, WDJ.START_QUANTITY, WDJ.SC ...

  2. Delphi中的消息截获(六种方法:Hook,SubClass,Override WndProc,Message Handler,RTTI,Form1.WindowProc:=@myfun)good

    Windows是一个基于消息驱动的系统,因此,在很多时候,我们需要截获一些消息然后自己进行处理.而VCL系统又有一些特定的消息.下面对我所了解的delphi环境中截获消息进行一些总结.      就个 ...

  3. AOJ 2200 Mr. Rito Post Office(Floyd+单调DP)

    [题目链接] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2200 [题目大意] 一张图中有陆路和水路,水路必须要有船才能走,当船 ...

  4. Qt开发初步,循序渐进,preRequest for 蓝图逆袭

    1,使用Qt面向对象类继承创建第一个窗口主部件,使用setMinimumSize(),setMaximumSize()配置主部件窗口是否能够resize;

  5. Django学习笔记(一)

    之前没有接触过django,甚至python也是最近才刚刚着手学习,可以说是零基础.要学习一门新技术,官方文档自然是首选的入门教程.开发环境:python2.7+django1.7+win 1.首先, ...

  6. Oracle自动执行任务(存储过程)

    Oracle自动执行任务(存储过程) SQL> variable job number;SQL> begin2 dbms_job.submit(:job,'存储过程名;',sysdate, ...

  7. vue分页组件table-pagebar

    之前一直接触都是原始的前端模型,jquery+bootstrap,冗杂的dom操作,繁琐的更新绑定.接触vue后,对前端MVVM框架有了全新的认识.本文是基于webpack+vue构建,由于之前的工作 ...

  8. ORA-600[kcratr_scan_lastbwr]逻辑坏块解决

    数据库版本: 11.2.0.3 问题现象: 今天在启动一台测试数据库的时候,发现db不能open,报错如下: ERROR at line 1: ORA-00600: internal error co ...

  9. CDH(cdh5.7) 上集成 kafka

    CDH 可以在线下载: 离线安装

  10. c++中类模版中的static数据成员的定义

    这个有点绕. 如下: template <typename T> class A{ ......... static std::allocate<T> alloc_; }; t ...