1、程序中故意抛出异常:

public class ExceptionActivity extends Activity {

    String str;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
str.equals("exception"); }
}

2、实现UncaughtExceptionHandler接口:

public class MyCrashHandler implements UncaughtExceptionHandler {
// 保证MyCrashHandler只有一个实例
// 2.提供一个静态的程序变量
private static MyCrashHandler myCrashHandler;
private Context context; // 1.私有化构造方法
private MyCrashHandler() { } // 3.暴露出来一个静态的方法 获取myCrashHandler public static synchronized MyCrashHandler getInstance() {
if (myCrashHandler == null) {
myCrashHandler = new MyCrashHandler();
}
return myCrashHandler;
} public void init(Context context) {
this.context = context;
} // 程序发生异常的时候调用的方法
// try catch @Override
public void uncaughtException(Thread thread, Throwable ex) {
System.out.println("出现错误啦 哈哈");
StringBuilder sb = new StringBuilder();
// 1.获取当前应用程序的版本号.
PackageManager pm = context.getPackageManager();
try {
PackageInfo packinfo = pm.getPackageInfo(context.getPackageName(),
0);
sb.append("程序的版本号为" + packinfo.versionName);
sb.append("\n"); // 2.获取手机的硬件信息.
Field[] fields = Build.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
// 暴力反射,获取私有的字段信息
fields[i].setAccessible(true);
String name = fields[i].getName();
sb.append(name + " = ");
String value = fields[i].get(null).toString();
sb.append(value);
sb.append("\n");
}
// 3.获取程序错误的堆栈信息 .
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter); String result = writer.toString();
sb.append(result); System.out.println(sb.toString()); // 4.把错误信息 提交到服务器 } catch (Exception e) {
e.printStackTrace();
} // 完成自杀的操作
android.os.Process.killProcess(android.os.Process.myPid());
} }

3、注册UncaughtExceptionHandler接口的实现类:

public class MyApp extends Application {

    //在整个应用第一次被创建出来的时候 执行
// 在应用程序对应的进程 第一次创建出来的时候执行
@Override
public void onCreate() {
super.onCreate();
//把自定义的异常处理类设置 给主线程
MyCrashHandler myCrashHandler = MyCrashHandler.getInstance();
myCrashHandler.init(getApplicationContext());
Thread.currentThread().setUncaughtExceptionHandler(myCrashHandler);
}
}

4、修改配置文件:

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:name="MyApp">
<activity
android:label="@string/app_name"
android:name=".ExceptionActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

Android学习笔记_67_Android MyCrashHandler 中异常处理 UncaughtExceptionHandler的更多相关文章

  1. 转 Android学习笔记: 学习过程中碰到的一些问题及解决方法

    在学习Android开发的过程中遇到了不少的问题,所幸的是最终经过上网查询都得到了解决.现在将我在学习Android开发过程中遇到的一些问题及解决的方法整理如下. 1.R.java不能实时更新 问题描 ...

  2. SpringBoot学习笔记(5)----SpringBoot中异常处理的三种方法

    对于异常的处理,Spring Boot中提供默认的一个异常处理界面,如下图: 但是在实际的运用开发中,这样的页面显然是不友好的,Spring Boot也提供了自定义异常处理的方式,如下总结三种一场处理 ...

  3. Android学习笔记之 SimpleAdapter 中添加按钮响应事件,getView的重写

    Andriod 里面的ListView是一个显示列表数据的控件,常用适配器SimpleAdapter进行绑定,绑定代码如下: ListView lstView = (ListView) this.fi ...

  4. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  5. 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常

    目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...

  6. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  7. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  8. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  9. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

随机推荐

  1. unity烘焙记录

    1.Unity Android 阴影不显示.阴影显示不正确 解决 http://blog.csdn.net/xuetao0605/article/details/50626181 2.阴影强度问题 不 ...

  2. CF 303C——Minimum Modular——————【剪枝】

    Minimum Modular time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  3. js跑步算法

    <!DOCTYPE html> <html> <head> <title>JavaScript</title> <style> ...

  4. OGNL,表达式上下文ContextMap

    1.OGNL表达式 object graph navigation language:对象图导航语言 存取对象属性:调用对象方法:字段类型转换等. <input type="text& ...

  5. WPF MVVM 如何在ViewModel中操作View中的控件事件

    (在学习Wpf的时候,做一个小例子,想在TextBox改变后,检验合法性,并弹出提示.在找了很多贴后,发现这个小例子,抄袭过来,仅供参考. 最后也找到了适合自己例子的办法:在出发TextChanged ...

  6. 轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理

    转载:https://blog.csdn.net/yanyan19880509/article/details/52435135 前言 前面介绍了java中排它锁,共享锁的底层实现机制,本篇再进一步, ...

  7. Python contextlib.contextmanager

    看着代码又发现了一个奇怪的东西: @contextlib.contextmanager def __call__(self, incoming): result_wrapper = [] yield ...

  8. 【转载】win7mysql5.7.18免安装配置教程

    闲着没事,装个mysql试试,小编以前都是用的linux,感觉mysql安装就是傻瓜式操作啊,第一次在windows系统上装,感觉出了很多问题,现在将整个过程分享给大家,希望大家在安装的时候少走弯路. ...

  9. 【Linux】Linux 在线安装yum

    Linux如何安装软件? 一.RPM安装 优点: 安装过程很简单 缺点: 需要自己寻找和系统版本对应的RPM包 安装过程中需要解决包的依赖问题(例如tftp包) 二.yum在线安装 软件包仓库 仓库的 ...

  10. (转)Android新的menu实现——ActionMode

    Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode.ActionMode是Android 3.0以后 ...