Android-控制整个APP的异常收集与处理
控制整个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的异常收集与处理的更多相关文章
- android app崩溃日志收集以及上传
源代码获取请到github:https://github.com/DrJia/AndroidLogCollector 已经做成sdk的形式,源代码已公开,源代码看不懂的请自行google. 假设想定制 ...
- Android 7.1 - App Shortcuts
Android 7.1 - App Shortcuts 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Shortcuts 文中如有纰漏,欢迎大家留言 ...
- Android程序捕获未处理异常,处理与第三方方法冲突时的异常传递
自己的android程序对异常进行了处理,用的也是网上比较流行的CrashHandler,代码如下,就是出现了未处理的异常程序退出,并收集收集设备信息和错误信息仪器保存到SD卡,这里没有上传到服务器. ...
- 支持Tasker控制的app合集
跟各种Tasker插件打交道,原因有两点: 1.站在开发者的角度:Tasker虽为神器,也不能面面俱到,一个原因就是Android自身过于分裂化造成的,不可能兼顾全平台和机型:个人开发者精力有限,也满 ...
- Android 中如何计算 App 的启动时间?
(转载) 已知的两种方法貌似可以获取,但是感觉结果不准确:一种是,adb shell am start -w packagename/activity,这个可以得到两个值,ThisTime和Total ...
- Android版-支付宝APP支付
此项目已开源 赶快来围观 Start支持下吧 [客户端开源地址-JPay][服务端端开源地址-在com.javen.alipay 包名下] 上一篇详细介绍了微信APP支付 点击这里 此篇文章来详细介绍 ...
- android.support.v4.app.Fragment和android.app.Fragment区别
1.最低支持版本不同 android.app.Fragment 兼容的最低版本是android:minSdkVersion="11" 即3.0版 android.support.v ...
- Android版-微信APP支付
首发地址: Android版-微信APP支付 欢迎留言.转发 微信极速开发系列文章(微信支付.授权获取用户信息等):点击这里 目录 1.注册账号.开发者认证 2.添加应用 3.申请微信支付 4.技术开 ...
- Android应用市场App发布
来自知乎 Android应用市场App发布说到官方渠道,不得不说一些主要的大市场了,如:360.小米.应用宝.91.安卓.百度.豌豆荚.安智.现在我来一一说它们的一些简单特点. 1,360 (1)当天 ...
随机推荐
- Error: Cannot find a valid baseurl for repo: epel
修改一下/etc/yum.repos.d/epel.repo文件, enable=1改为enable=0
- JVM7、8详解及优化
一.引言:永久代为什么被移出HotSpot JVM了? 详见:JEP 122: Remove the Permanent Generation 原因主要有两个: 1.由于Permanent Gener ...
- 《Visual C++开发实战1200例 第1卷》扫描版[PDF]
[内容简介:] <Visual C++开发实战1200例(第1卷)>是“软件开发实战1200例”丛书之一.<Visual C++开发实战1200例(第1卷)>,编程实例的四库全 ...
- configparser模块 logging模块
configparser模块 固定格式的配置文件 有一个对应的模块去帮你做这个文件的字符串处理 config = configparser.Configparser() config.read(“ex ...
- 二叉查找树迭代器 · Binary Search Tree Iterator
[抄题]: 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 对于下列二叉查找树,使用迭 ...
- [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 ...
- HDU 4499.Cannon 搜索
Cannon Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- 品味性能之道<六>:图形化SQL分析工具
在上一章里,重点分享了命令行SQL分析工具的使用方法.在本章将重点分享PL/SQL的SQL分析工具. 一.如何打开PL/SQL执行计划 开启PL/SQL这工具,推荐如下方法: 点击 ...
- Java数据结构和算法(二)树的基本操作
Java数据结构和算法(二)树的基本操作 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.树的遍历 二叉树遍历分为:前序遍 ...
- adb占用
输入netstat -ano | findstr "5037" .然后会弹出提示告诉你哪些进程占用了该端口,记住非0地址的后面的数字 打开任务管理器,点击“进程“,“查看”-“选择 ...