Android全局异常捕获日志打印
来源:互联网 发布:ubuntu ctrl alt l 编辑:程序博客网 时间:2024/05/20 07:16
/** * Creator lh on 2017/2/24 9:55. * Email:3021634343@qq.com * Description: 全局异常捕获日志打印 */public class CrashHandler implements Thread.UncaughtExceptionHandler { private static CrashHandler instance; private Context mContext; private Thread.UncaughtExceptionHandler mDefaultHandler; private HashMap<String,String> infos = new HashMap<String,String>(); public static CrashHandler getInstance(){ if(instance == null){ instance = new CrashHandler(); } return instance; } public void init(Context context){ this.mContext = context; // 获取系统默认的UncaughtException处理类 mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); // 设置 CrashHandler为系统默认的处理器 Thread.setDefaultUncaughtExceptionHandler(this); } @Override public void uncaughtException(Thread thread, Throwable ex) { if (!handleException(ex) && mDefaultHandler != null) { // 如果用户没有处理让系统默认的来处理 mDefaultHandler.uncaughtException(thread, ex); } else { try { Thread.sleep(3000); } catch (InterruptedException e) { }finally{ } // 退出程序 android.os.Process.killProcess(android.os.Process.myPid()); //非正常退出 System.exit(1); } } /** * @param ex * @return true */ private boolean handleException(Throwable ex) { if (ex == null) { return false; } final String str = ex.toString(); // Toast来显示提示信息 new Thread() { @Override public void run() { Looper.prepare(); if(str.contains("IllegalStateException")){ T.showShort(mContext, "程序异常"); }else{ T.showShort(mContext, "糟糕,程序出异常,即将退出!"); } Looper.loop(); } }.start(); // 收集设备参数信息 collectDeviceInfo(mContext); L.e("出错了", ex.getStackTrace().toString()); /**上传服务器 LogTask task = new LogTask(); task.execute("15333805663",(ex.toString()+saveCrashInfo2File(ex)).replace("=", "|"));*/ return true; } /** * 收集设备参数信息 * @param ctx */ public void collectDeviceInfo(Context ctx) { try { PackageManager pm = ctx.getPackageManager(); PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES); if (pi != null) { String versionName = pi.versionName == null ? "null" : pi.versionName; String versionCode = pi.versionCode + ""; infos.put("versionName", versionName); infos.put("versionCode", versionCode); } } catch (PackageManager.NameNotFoundException e) {// Log.e(TAG, "an error occured when collect package info", e); } Field[] fields = Build.class.getDeclaredFields(); for (Field field : fields) { try { field.setAccessible(true); infos.put(field.getName(), field.get(null).toString());// Log.d(TAG, field.getName() + " : " + field.get(null)); } catch (Exception e) {// Log.e(TAG, "an error occured when collect crash info", e); } } }}
在全局入口Application初始化
//日志捕获缓存类
CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext());
0 0
- Android全局异常捕获日志打印
- Android全局异常捕获,解决日志打印三次的BUG
- 全局捕获异常日志
- android 捕获全局异常
- android 捕获全局异常
- Android 捕获全局异常
- android 全局异常捕获
- android捕获全局异常
- android捕获全局异常
- android 全局异常 捕获
- Android捕获全局异常
- android 捕获全局异常
- Android全局捕获异常
- android 捕获全局异常
- Android全局异常捕获
- android 全局异常捕获
- Android 全局异常捕获
- Android 全局异常捕获
- RMI原理
- POS直联模式与间联模式的区别与利弊分析
- 关于拷贝构造函数的调用方式
- 面试题sizeof和五大内存分区
- android 微信分享带有缩略图的网页
- Android全局异常捕获日志打印
- csdn如何装载别人的博客
- Leetcode-474-Ones and Zeroes
- 软件测试误区
- POJ 2125 Destroying The Graph 二分图 最小点权覆盖
- Linux学习笔记4 (磁盘管理)
- PL/SQL 学习-NVL函数
- Android 6.0 开机时间分析工具bootchart的使用
- mt7601驱动加载