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自己定义组件笔者有好几篇想跟大家分享的,后期会记录在博客中.本篇 ...
随机推荐
- BZOJ 4012 [HNOI2015]开店 (树分治+二分)
题目大意: 给你一棵树,边有边权,点有点权,有很多次询问,求点权$\in[l,r]$的所有节点到某点$x$的距离之和,强制在线 感觉这个题应该放在动态点分之前做= = 套路方法和动态点分是一样的 每次 ...
- BZOJ 3510 首都 (LCT)
洛谷P4299传送门 题目大意:给你一颗树,边是一条一条连上去的 在连接过程中会存在询问,询问当前节点所在联通块(其实是一颗树)的重心是哪个节点 以及森林中所有树的重心的异或和 在做这道题之前,要先了 ...
- linux rar 解压忽略带密码压缩包
#解压忽略密码 rar x -p- file.rar #解压忽略子目录 rar x -ep file.rar
- python异常处理,多线程,多进程
什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常. 异常是Python对象,表示一个错误. 当Pyth ...
- PHP实现的毫秒定时器,同时解决进程不重复堆积
定时器任务,在WEB应用比较常见,如何使用PHP实现定时器任务,大致有两种方案:1)使用Crontab命令,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本:2)配合使用ignore_ ...
- Unity的Json解析<一>--读取Json文件
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50373558 作者:car ...
- npm --save 选项作用
npm --save 选项作用 学习了:https://segmentfault.com/q/1010000000403629 -save和save-dev可以省掉你手动修改package.json文 ...
- 国家人工智能(AI)的美好前景
在今年两会期间.李彦宏(Robin Lee,1968-)关于人工智能(AI)"国家优先"的提案,即所谓的"中国大脑"计划.依据何在?为什么? 近几年,世界互联网 ...
- 110_leetcode_Best Time to Buy and sell Stock II
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- TRIZ系列-创新原理-34-抛弃和再生部件原理
抛弃和再生部件原理的详细描写叙述例如以下:1)物件的部件在完毕其功能,或者变得没用之后,就被扔掉(丢弃.溶解,挥发等),或者在工作过程已经改变.2)物体已经用掉的部件,应该在工作期间恢复: 对于抛弃原 ...