Android学习笔记_67_Android MyCrashHandler 中异常处理 UncaughtExceptionHandler
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的更多相关文章
- 转 Android学习笔记: 学习过程中碰到的一些问题及解决方法
在学习Android开发的过程中遇到了不少的问题,所幸的是最终经过上网查询都得到了解决.现在将我在学习Android开发过程中遇到的一些问题及解决的方法整理如下. 1.R.java不能实时更新 问题描 ...
- SpringBoot学习笔记(5)----SpringBoot中异常处理的三种方法
对于异常的处理,Spring Boot中提供默认的一个异常处理界面,如下图: 但是在实际的运用开发中,这样的页面显然是不友好的,Spring Boot也提供了自定义异常处理的方式,如下总结三种一场处理 ...
- Android学习笔记之 SimpleAdapter 中添加按钮响应事件,getView的重写
Andriod 里面的ListView是一个显示列表数据的控件,常用适配器SimpleAdapter进行绑定,绑定代码如下: ListView lstView = (ListView) this.fi ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
- 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
随机推荐
- jdk7.NIO.2学习笔记之目录文件及权限
package com.zl.jdk7; import java.io.File; import java.io.IOException; import java.nio.file.Path; imp ...
- 8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04
80X86中断系统 能够处理256个中断 用中断向量号0-255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 1.中断的分类 中断可以分为内部中断和外部中断. (1)内 ...
- FZU 2213——Common Tangents——————【两个圆的切线个数】
Problem 2213 Common Tangents Accept: 7 Submit: 8Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- nyoj 568——RMQ with Shifts——————【线段树单点更新、区间求最值】
RMQ with Shifts 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 In the traditional RMQ (Range Minimum Q ...
- 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解
介绍 昨天发的<大叔手记(19):你真懂JavaScript吗?>里面的5个题目,有很多回答,发现强人还是很多的,很多人都全部答对了. 今天我们来对这5个题目详细分析一下,希望对大家有所帮 ...
- (四) HTML之表单元素
HTML中的表单元素,是构成动态网页的重要组成部分,因此,熟知表单元素是十分重要的.下面将根据表单中的一些常用标签进行介绍 1.单选按钮 <input type="radio" ...
- Linux 套接字编程 - select
select 可以感知文件表述符集合中的变化,如果办fd0(即标准输入)放入select的read fd set,发现只有按回车的时候select才会返回.查了下要把终端的缓冲大小设为1,这样就能实现 ...
- keepalived+nginx 高可用集群
一.什么是高可用? nginx做负载均衡,能达到分发请求的目的,但是不能很好的避免单点故障. 1.nginx集群单点问题 分发器宕机怎么处理? 假如nginx服务器挂掉了,那么所有的服务也会跟着瘫 ...
- jquery获取不了ajax动态添加的内容的解决办法
在HTML页面的一个button <div class="ajaxClick"> <button>内容</button> </div> ...
- .NET开源工作流RoadFlow-表单设计-附件管理
在表单中添加一个附件管理的控件: 文件类型:指定可以上传的文件类型.