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. poj 3250 Bad Hair Day(单调队列)

    题目链接:http://poj.org/problem?id=3250 思路分析:题目要求求每头牛看见的牛的数量之和,即求每头牛被看见的次数和:现在要求如何求出每头牛被看见的次数? 考虑到对于某头特定 ...

  2. aix运维

    AIX操作系统中有很多程序,为了进行程序版本控制,每一个程序集都有自己的版本号.版本号是由小数点分隔的四位数字,例如5.3.0.9其含义是:操作系统版本号(version).发行版本号(release ...

  3. python写xml文件

    为了便于后续的读取处理,这里就将信息保存在xml文件中,想到得到的文件如下: 1 <?xml version="1.0" encoding="utf-8" ...

  4. C# NameValueCollection集合 .

    案例: NameValueCollection nameValueCollection = Request.Params;//获得连接地址中的所有参数 //获取各个参数,eg:            ...

  5. Productivity Improvements for the Entity Framework(实体框架设计)【转】

    Background We’ve been hearing a lot of good feedback on the recently released update to the Entity F ...

  6. C# linq to xml

    XDocument doc = new XDocument( new XDeclaration("1.0", "utf-8", "yes") ...

  7. 第四课 Grid Control实验 GC Agent安装(第一台机器部署) 及卸载

    3.GC Agent安装(第一台机器部署) 安装Agent 拷贝agent,现在ocm2机器上查找agent.linux  查找文件的方法: find ./ -name agent*linux 把ag ...

  8. Spring 4.0 中的 WebSocket 架构

    两年前,客户端与服务器端的全双工双向通信作为一个很重要的功能被纳入到WebSocket RFC 6455协议中.在HTML5中,WebSocket已经成为一个流行词,大家对这个功能赋予很多构想,很多时 ...

  9. java中int和Integer的区别

    Integer与int的种种比较你知道多少?  转载自http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html 如果面试 ...

  10. light oj 1027 A Dangerous Maze

    一道数学期望题,唉唉,概率论学的不好啊~~ 求走出迷宫的期望时间. 由于有的门会回到起点,所以有可能会走很多遍,设能走出去的门的个数为n1,总的个数为n,那么一次走出去的概率为n1/n,走一次的用的平 ...