Android 捕获crash
来源:互联网 发布:防sql注入方法 php 编辑:程序博客网 时间:2024/04/28 20:31
在用户使用Android应用过程中,可能发生一些意想不到的问题,开发工程师无法完全处理所有问题,而且这些问题藏的比较深,测试也没有测试出来。
如果导致崩溃势必影响用户的使用,而且工程师需要这些异常的信息来修复bug。使用我们需要处理这样的异常。
方法如下:
1、实现自己的UncaughtExceptionHandler。
在这个UncaughtExceptionHandler里收集需要的信息(最终发送到服务器等等,...这里只把信息记录了下来)。
/*** * 系统崩溃 */public class MyCrashHandler implements UncaughtExceptionHandler { private Context mContext; private String CRASH_DIRECTORY = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +"crash"; // 用来存储设备信息和异常信息 private Map<String, String> infos = new HashMap<String, String>(); // 用于格式化日期,作为日志文件名的一部分 private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); public MyCrashHandler(Context context) { this.mContext = context; } @Override public void uncaughtException(Thread thread, Throwable ex) { try { // 收集设备参数信息 collectDeviceInfo(mContext); // 保存日志文件 saveCrashInfo2File(ex); } catch (Exception e) { e.printStackTrace(); } // 重新启动程序,注释上面的退出程序 Intent intent = new Intent(); intent.setClass(mContext, MainActivity.class); intent.putExtra("flag", "crash"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); mContext.startActivity(intent); android.os.Process.killProcess(android.os.Process.myPid()); } /** * 收集设备参数信息 * * @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 (NameNotFoundException e) { LogUtils.e("an error occured when collect package info" + e.toString()); } Field[] fields = Build.class.getDeclaredFields(); for (Field field : fields) { try { field.setAccessible(true); infos.put(field.getName(), field.get(null).toString()); LogUtils.d(field.getName() + " : " + field.get(null)); } catch (Exception e) { LogUtils.e("an error occured when collect crash info" + e.toString()); } } } /** * 保存错误信息到文件中 * * @param ex */ private void saveCrashInfo2File(Throwable ex) { StringBuffer sb = new StringBuffer(); for (Map.Entry<String, String> entry : infos.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); sb.append(key + "=" + value + "\n"); } Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); ex.printStackTrace(printWriter); Throwable cause = ex.getCause(); while (cause != null) { cause.printStackTrace(printWriter); cause = cause.getCause(); } printWriter.close(); String result = writer.toString(); sb.append(result); try { LogUtils.e("crash -- " + sb.toString()); long timestamp = System.currentTimeMillis(); String time = formatter.format(new Date()); String fileName = time + "-" + timestamp + ".log"; //将错误日志保存在sdcard/crash/中 FileStorage fileStorage = new FileStorage(); fileStorage.savePublic(CRASH_DIRECTORY, fileName,sb.toString().getBytes()); } catch (Exception e) { LogUtils.e("an error occured while writing file..." + e.toString()); } }}
2、在Application中设置用我们自己定义的UncaughtExceptionHandler来处理崩溃异常。
//程序崩溃Thread.setDefaultUncaughtExceptionHandler(new MyCrashHandler(this));
0 0
- Android crash 日志捕获
- Android crash 日志捕获
- Android crash 日志捕获
- android crash日志捕获
- Android UncaughtExceptionHandler捕获Crash
- Android 捕获crash
- Android 中Crash捕获异常
- Android Crash捕获及处理
- crash 捕获
- 在Android Activity中捕获Application Crash
- 在Android Activity中捕获Application Crash
- 在Android Activity中捕获Application Crash
- Android自定义捕获Application全局异常(crash)
- Android如何捕获应用的crash信息
- Android UncaughtExceptionHandler捕获crash的全局异常
- 调用第三方库crash异常捕获android
- android开发技巧-记录未捕获的crash异常日志
- Android进阶——Crash异常捕获并发送到服务器
- 前端开源项目周报0228
- BSDS500/BSDS300分割数据集的下载以及matlab处理
- Python 中的range(),arange()函数
- 文字跑马灯效果
- Pat1005
- Android 捕获crash
- Unity 5.x AssetBundle零冗余解决方案
- Mybatis 数据库物理分页插件 PageHelper 前端实现
- PAT 1112
- Android开发之数字字符串小数为0的直接显示整数工具
- Oracle 11g R2 RAC RMAN备份脚本示例
- aix-oracle数据库连接过多导致归档日志满
- 工作中积累的琐碎
- 关于更改hosts上网