Android自己定义处理崩溃异常
用过安卓手机的用户以及安卓开发人员们会时长碰到程序异常退出的情况。普通用户遇到这样的情况,肯定非常恼火,甚至会骂一生垃圾软件,然后卸载掉。那么开发人员们在开发过程中遇到这样的情况给怎么办呢,当然,你不可能世界上的每一个安卓手机你都要试试你的程序有没有异常,这是无法办到的事情,所以最好的办法就是。当普通用户遇到这样的情况时。让应用自己主动把错误信息发送到你的server,然后你去分析异常原因。这是不是一件非常有意义的事情啊?本文參考自:http://blog.csdn.net/liuhe688/article/details/6584143,看到有些小伙伴们的一些需求。就是异常退出后。弹出一个对话框,让用户来选择是否发送错误信息。这是一个好的想法,有些童鞋可能立刻想到了AlertDialog。可是实际情况呢。根本没反应,AlertDialog并没有弹出来,这是为什么呢?事实上异常的时候,整个应用就已经退出了,与这个应用相关的全部的Activity都已被销毁,AlertDialog当然不会再起作用,所以我们要换一种思路,当程序异常时,让其跳转到还有一个Activity,并把错误信息传递到这个Activity中,并在这里让用户选择是否发送错误信息,但有些同学说,我要的是对话框,不是一整个界面,这好办啊,把Activity整成对话框样式不就能够了吗?(怎样设置Dialog样式的Activity。请看:点这里)
自己定义的异常捕获请看原文,或者下载我的源代码,实现步骤就是启动主Activity时同一时候启动一个Service,把跳转到窗体化的Activity的方法放进Service,在捕获到异常时,运行这种方法。
TestService.java
public class TestService extends Service { private static TestService mInstance = null; @Override
public IBinder onBind(Intent arg0) {
return null;
} @Override
public void onCreate() {
super.onCreate();
mInstance = this;
} public static TestService getInstance() {
return mInstance;
} public void sendError(final String message){
Intent intent = new Intent(this, SendErrorActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("msg", message);
startActivity(intent);
stopSelf();
} }
异常捕获时的处理:CrashHandler.java
/**
* 自己定义错误处理,收集错误信息 发送错误报告等操作均在此完毕.
*
* @param ex
* @return true:假设处理了该异常信息;否则返回false.
*/
private boolean handleException(Throwable ex) {
if (ex == null) {
return false;
}
new Thread() {
@Override
public void run() {
Looper.prepare();
TestService.getInstance().sendError("error:made by byl");
Looper.loop();
}
}.start(); //收集设备參数信息
collectDeviceInfo(mContext);
//保存日志文件
saveCrashInfo2File(ex); return false;
}
发送错误的Activity:
public class SendErrorActivity extends Activity implements OnClickListener{ private Button ok,cancel;
private String error_msg; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loginoutinfo);
getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
ok=(Button) findViewById(R.id.ok);
cancel=(Button) findViewById(R.id.cancel);
error_msg=getIntent().getStringExtra("msg");
ok.setOnClickListener(this);
cancel.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ok:
Toast.makeText(this, "发送成功("+error_msg+")", 1).show();
finish();
break;
case R.id.cancel:
finish();
break;
default:
break;
} } @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK ){
return true;
}
return super.onKeyDown(keyCode, event);
} }
如图:
源代码下载地址:http://download.csdn.net/detail/baiyuliang2013/7784163
Android自己定义处理崩溃异常的更多相关文章
- Android开发之处理崩溃异常
众所周知,android的设备千差万别,难免会发生崩溃异常等现象,这个时候就需要捕获哪些崩溃异常了,也就是捕获崩溃异常的相关信息,并记录下来,这样一来方便开发人员和测试人员的分析与调试. 1.首先我们 ...
- Android开发-新建线程崩溃
一直不满意车机不能实现屏保,最近发现可以通过设置亮度实现,顾萌生了自己写程序的来实现的念头,遂修改原来练手的app.毕竟过去了1年,各类程序.sdk都已经更新了不知道多少版本.经历了痛苦的升级.更新, ...
- Android程序崩溃异常收集框架
最近在写Android程序崩溃异常处理,完成之后,稍加封装与大家分享. 我的思路是这样的,在程序崩溃之后,将异常信息保存到一个日志文件中,然后对该文件进行处理,比如发送到邮箱,或发送到服务器. 所以, ...
- Android application捕获崩溃异常
Java代码 .收集所有 avtivity 用于彻底退出应用 .捕获崩溃异常,保存错误日志,并重启应用 , intent, , restartIntent); // 关闭当前应用 finishAllA ...
- 【转】Android 中处理崩溃异常并重启程序出现页面重叠的问题
原文地址:http://blog.csdn.net/jiang547860818/article/details/53641113 android开发中经常会遇到程序异常,而已常常会遇到一出现异常AP ...
- Android中处理崩溃异常和记录日志(转)
现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开 ...
- Android自己定义控件:进度条的四种实现方式
前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...
- AIDL —— Android接口定义语言
AIDL:Android Interface Definition Language,即Android接口定义语言,是Android进程间通信比较常用的一种方式.翻译一下,就是为了让某个Service ...
- Android自己定义DataTimePicker(日期选择器)
Android自己定义DataTimePicker(日期选择器) 笔者有一段时间没有发表关于Android的文章了,关于Android自己定义组件笔者有好几篇想跟大家分享的,后期会记录在博客中.本篇 ...
随机推荐
- Vue系列(二):发送Ajax、JSONP请求、Vue生命周期及实例属性和方法、自定义指令与过渡
上一篇:Vue系列(一):简介.起步.常用指令.事件和属性.模板.过滤器 一. 发送AJAX请求 1. 简介 vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 ...
- 虚拟机安装mac
没成功,把几篇不错的文章先记录下地址 http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1437039 http://bbs.pcbeta. ...
- linux部分常用命令
linux的命令挺多的,下面是我常用的,其实也不可能在敲代码的时候把这个博客拿出来对着写,就是想记录一下,刚开始都觉得不好记,多敲几遍就记住了!!! 创建文件夹:mkdir filename 删除当前 ...
- 【Codeforces Round #483 (Div. 2) C】Finite or not?
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 有个性质. 如果p/q是分数的最简形式. 那么p/q能化成有限小数. 当且仅当q的质因数分解形式中只有质因子2和5 (且不能出现其他 ...
- java文件对照工具
今天想比較一下两个java文件.这两个文件是本地的. 就在网上下载了一个对照工具(破解版)认为挺好用的对于不同的地方有高亮显示. 就给大家分享一下.软件名叫:beyond compare 软件下载地址 ...
- perl getopt 用法
我们在linux经常常使用到一个程序须要增加參数,如今了解一下perl中的有关控制參数的函数.getopt.在linux有的參数有二种形式.一种是--help,还有一种是-h.也就是-和--的分别.- ...
- WIN7使用VisualSVN建立SVN服务器
使用SVN开发十分的方便,这样就不用每次都拷贝粘贴来备份了,网上看到一篇给自己的windows电脑安装SVN服务器的使用非常方便. 1.下载安装文件(服务器端和客户端) 服务器端采用VisualSVN ...
- mysql导入数据,涉及到时间转换,乱码问题解决
表结构: drop table if exists `qi_an_log`;CREATE TABLE `qian_log` (`dt` LONG NOT NULL COMMENT '产生日期,格式yy ...
- 【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
单源最短路问题是固定一个起点,求它到其他所有点的最短路的问题. 算法: 设 d[i] 表示 起点 s 离点 i 的最短距离. [1.初始化] 固定起点s,对所有的点 , 如果 i = s , ...
- mybatis批量插入、批量更新和批量删除
转载 https://www.jianshu.com/p/041bec8ae6d3