Android-控制整个APP的异常收集与处理
2024-08-30 03:44:43
控制整个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());
最新文章
- CAEmitterLayer 粒子发射Layer的相关属性
- Linux下查看所有CPU核心使用率的方法
- JQuery LazyLoad实现图片延迟加载-探究
- makefile中的shell语法
- delphi 基础之一 数据类型和基本语法
- C# 索引器 学习
- html代码实现自动滚动,鼠标滑过时停止滚动
- day11基础代码——函数指针
- C# Best Practices - Handling Strings
- 数据结构——AVL平衡树
- Composer常见问题
- Your build host version of Xamarin.IOS (release NO.)is too recent to work with the IOS designer
- xtemplate语法
- Freemarker的基本语法及入门基础
- UGUI 中Dropdown控件的使用经验
- JSP(一):初识JSP
- 洛谷 P3956 棋盘(BFS)
- 记一次ios加急上架经历
- JDBC Mysql 驱动连接异常
- iOS开发网络篇—GET请求和POST请求的说明与比较
热门文章
- Containerpilot 配置文件 之 Jobs
- 根据数组下标在MongoDB中修改数组元素
- ASP.NET中UrlEncode应该用Uri.EscapeDataString()(转)
- hdoj2859(矩阵DP)
- luoguP1004 方格取数(四维DP)
- cdoj第13th校赛初赛L - Lovely princess
- Tunnel Warfare (区间合并|最大值最小值巧妙方法)
- PostgreSQL+pgpool-II复制方案
- linux 下 php 安装 libevent
- Golang之waitgroup用法