控制整个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. Error: Cannot find a valid baseurl for repo: epel

    修改一下/etc/yum.repos.d/epel.repo文件, enable=1改为enable=0

  2. JVM7、8详解及优化

    一.引言:永久代为什么被移出HotSpot JVM了? 详见:JEP 122: Remove the Permanent Generation 原因主要有两个: 1.由于Permanent Gener ...

  3. 《Visual C++开发实战1200例 第1卷》扫描版[PDF]

    [内容简介:] <Visual C++开发实战1200例(第1卷)>是“软件开发实战1200例”丛书之一.<Visual C++开发实战1200例(第1卷)>,编程实例的四库全 ...

  4. configparser模块 logging模块

    configparser模块 固定格式的配置文件 有一个对应的模块去帮你做这个文件的字符串处理 config = configparser.Configparser() config.read(“ex ...

  5. 二叉查找树迭代器 · Binary Search Tree Iterator

    [抄题]: 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 对于下列二叉查找树,使用迭 ...

  6. [leetcode]113. Path Sum II路径和(返回路径)

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  7. HDU 4499.Cannon 搜索

    Cannon Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Subm ...

  8. 品味性能之道<六>:图形化SQL分析工具

         在上一章里,重点分享了命令行SQL分析工具的使用方法.在本章将重点分享PL/SQL的SQL分析工具. 一.如何打开PL/SQL执行计划      开启PL/SQL这工具,推荐如下方法: 点击 ...

  9. Java数据结构和算法(二)树的基本操作

    Java数据结构和算法(二)树的基本操作 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.树的遍历 二叉树遍历分为:前序遍 ...

  10. adb占用

    输入netstat -ano | findstr "5037" .然后会弹出提示告诉你哪些进程占用了该端口,记住非0地址的后面的数字 打开任务管理器,点击“进程“,“查看”-“选择 ...