控制整个App的异常收集与处理,使用前记得要在Application中初始化initCrasHandler

CrasHandler APP异常收集类:

package common.library.exception;

import android.content.Context;
import android.os.Build;
import android.os.Looper; import common.library.config.AppConfig;
import common.library.manager.AppManager;
import common.library.utils.LogUtil; /**
* @Author Liudeli
* @Describe:控制整个App的异常收集与处理,使用前记得要在Application中初始化initCrasHandler
*/
public class CrasHandler implements Thread.UncaughtExceptionHandler { private static final String TAG = CrasHandler.class.getSimpleName();
private static final String TAG_THIS_APP_NAME = AppConfig.APP_NAME;
private static final String ERROR_INFO = "后台检测到程序异常,程序在五秒内自动关闭,请告知开发人员刘德利来解决此问题"; private Context mContext;
private Thread.UncaughtExceptionHandler uncaughtExceptionHandler; private CrasHandler() {} private static CrasHandler crasHandler = null; public static CrasHandler getInstance() {
if (null == crasHandler) {
// synchronized (CrasHandler.class) {
//if (null == crasHandler) {
crasHandler = new CrasHandler();
// }
// }
}
return crasHandler;
} /**
* 初始化设置(把系统的修改成自身的来控制)
*/
public void initCrasHandler(Context mContext) {
this.mContext = mContext;
Thread.setDefaultUncaughtExceptionHandler(this);
uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
} @Override
public void uncaughtException(Thread t, Throwable e) {
if (isHandler(e)) {
handlerException(t, e);
} else {
uncaughtExceptionHandler.uncaughtException(t, e);
}
} /**
* 判断是否为空,才能知道是否需要自己处理
* @param e
* @return
*/
private boolean isHandler(Throwable e) {
if (null == e) {
return false;
} else {
return true;
}
} /**
* 处理我需要处理的异常信息,并告知用户,并退出当前应用程序
* @param t
* @param ex
*/
private void handlerException(Thread t, Throwable ex) {
new Thread(){
@Override
public void run() {
super.run();
// 默认下,Android是没有开启Looper消息处理的,主线程除外
Looper.prepare();
LogUtil.toastL(mContext, ERROR_INFO);
Looper.loop();
}
}.start(); // 收集异常信息
collectException(ex); try {
t.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
} // 关闭APP
AppManager.getInstance().deleteAllActivity();
// 结束当前应用程序进程
android.os.Process.killProcess(android.os.Process.myPid());
// 结束虚拟机,是否所有内存
System.exit(0);
} /**
* 收集异常信息
* @param e
*/
private void collectException(Throwable e) {
final String deviceInfo = Build.VERSION.SDK_INT + ", " + Build.MODEL + ", " + Build.PRODUCT;
final String errorInfo = e.getMessage();
new Thread(){
@Override
public void run() {
super.run();
LogUtil.e(TAG_THIS_APP_NAME, "deviceInfo:" + deviceInfo + ", errorInfo:" + errorInfo);
}
}.start();
}
}

在APP项目中配置 APP的异常收集与处理;

在APP项目中的 XXXApplication --> onCreate方法中以下配置

CrasHandler.getInstance().initCrasHandler(getApplicationContext());

Android-控制整个APP的异常收集与处理的更多相关文章

  1. android app崩溃日志收集以及上传

    源代码获取请到github:https://github.com/DrJia/AndroidLogCollector 已经做成sdk的形式,源代码已公开,源代码看不懂的请自行google. 假设想定制 ...

  2. Android 7.1 - App Shortcuts

    Android 7.1 - App Shortcuts 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Shortcuts 文中如有纰漏,欢迎大家留言 ...

  3. Android程序捕获未处理异常,处理与第三方方法冲突时的异常传递

    自己的android程序对异常进行了处理,用的也是网上比较流行的CrashHandler,代码如下,就是出现了未处理的异常程序退出,并收集收集设备信息和错误信息仪器保存到SD卡,这里没有上传到服务器. ...

  4. 支持Tasker控制的app合集

    跟各种Tasker插件打交道,原因有两点: 1.站在开发者的角度:Tasker虽为神器,也不能面面俱到,一个原因就是Android自身过于分裂化造成的,不可能兼顾全平台和机型:个人开发者精力有限,也满 ...

  5. Android 中如何计算 App 的启动时间?

    (转载) 已知的两种方法貌似可以获取,但是感觉结果不准确:一种是,adb shell am start -w packagename/activity,这个可以得到两个值,ThisTime和Total ...

  6. Android版-支付宝APP支付

    此项目已开源 赶快来围观 Start支持下吧 [客户端开源地址-JPay][服务端端开源地址-在com.javen.alipay 包名下] 上一篇详细介绍了微信APP支付 点击这里 此篇文章来详细介绍 ...

  7. android.support.v4.app.Fragment和android.app.Fragment区别

    1.最低支持版本不同 android.app.Fragment 兼容的最低版本是android:minSdkVersion="11" 即3.0版 android.support.v ...

  8. Android版-微信APP支付

    首发地址: Android版-微信APP支付 欢迎留言.转发 微信极速开发系列文章(微信支付.授权获取用户信息等):点击这里 目录 1.注册账号.开发者认证 2.添加应用 3.申请微信支付 4.技术开 ...

  9. Android应用市场App发布

    来自知乎 Android应用市场App发布说到官方渠道,不得不说一些主要的大市场了,如:360.小米.应用宝.91.安卓.百度.豌豆荚.安智.现在我来一一说它们的一些简单特点. 1,360 (1)当天 ...

随机推荐

  1. gtftools软件简单介绍(我自己不建议用,因为我发现不好用)

    1)背景 生物信息学研究经常涉及计算或提取基因的各种特征,如基因ID作图,GC含量计算和不同类型的基因长度,通过操纵基因模型,这些模型通常以GTF格式注释,可从ENSEMBL或GENCODE数据库获得 ...

  2. jdbcTemplate in

    参考 http://blog.csdn.net/gaopeng0071/article/details/75049952 使用NamedParameterJdbcTemplate public cla ...

  3. css:多个div在同一行显示

    使用float:left,也可以使用display : inline-block,可以使多个div在同一行显示. 示例如下: <div class="search_row"& ...

  4. hdoj1176 免费馅饼(dp 数塔)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路: 这道题不复杂,很明显是个dp题,数据比较大,搜索应该会超时,想到如何初始化,注意细节就差 ...

  5. Python学习记录day8

    目录 Python学习记录day8 1. 静态方法 2. 类方法 3. 属性方法 4. 类的特殊成员方法 4.1 __doc__表示类的描述信息 4.2 __module__ 和 __class__ ...

  6. jquery datatables api

    原文地址 学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/ ...

  7. NPOI创建doc

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  8. struts框架中OGNL表达式的使用之jsp页面获取action中的属性值

    在jsp页面中获取action中的值: 1.写一个action类OgnlAction类: 需要注意的地方: 如果在aciton中直接使用ognl表达式,将值存储的值栈中,是不能通过跳转将值传到jsp页 ...

  9. 关于MySQL在内网中使用另一台机器访问的问题

    要在内网中访问另一台机器的MySQL数据库,需要两步操作 一是把运行MySQL的机器的3306端口打开,最好是能限制访问IP保证安全性. 二是更改MySQL账户的访问权限.MySQL的root账户默认 ...

  10. [Jmeter]Xpath获取元素某个属性的值,以及获取最后一个元素某个属性的值

    XPath获取元素某个属性的值 XPath query:  clients/attribute::total XPath获取最后一个元素某个属性的值 XPath query:   /clients/c ...