Android application捕获崩溃异常

时间:2023-03-08 19:41:03
Android application捕获崩溃异常
Java代码
  1. 、收集所有 avtivity 用于彻底退出应用
  2. 、捕获崩溃异常,保存错误日志,并重启应用
  3. , intent,
  4. , restartIntent);
  5. // 关闭当前应用
  6. finishAllActivity();
  7. finishProgram();
  8. }
  9. };
  10. /**
  11. * 保存错误信息到文件中
  12. *
  13. * @return 返回文件名称
  14. */
  15. private String saveCatchInfo2File(Throwable ex) {
  16. Writer writer = new StringWriter();
  17. PrintWriter printWriter = new PrintWriter(writer);
  18. ex.printStackTrace(printWriter);
  19. Throwable cause = ex.getCause();
  20. while (cause != null) {
  21. cause.printStackTrace(printWriter);
  22. cause = cause.getCause();
  23. }
  24. printWriter.close();
  25. String sb = writer.toString();
  26. try {
  27. DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
  28. String time = formatter.format(new Date());
  29. String fileName = time + ".txt";
  30. System.out.println("fileName:" + fileName);
  31. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  32. String filePath = Environment.getExternalStorageDirectory() + "/HKDownload/" + packgeName
  33. + "/crash/";
  34. File dir = new File(filePath);
  35. if (!dir.exists()) {
  36. if (!dir.mkdirs()) {
  37. // 创建目录失败: 一般是因为SD卡被拔出了
  38. return "";
  39. }
  40. }
  41. System.out.println("filePath + fileName:" + filePath + fileName);
  42. FileOutputStream fos = new FileOutputStream(filePath + fileName);
  43. fos.write(sb.getBytes());
  44. fos.close();
  45. //文件保存完了之后,在应用下次启动的时候去检查错误日志,发现新的错误日志,就发送给开发者
  46. }
  47. return fileName;
  48. } catch (Exception e) {
  49. System.out.println("an error occured while writing file..." + e.getMessage());
  50. }
  51. return null;
  52. }
  53. // ------------------------------activity管理-----------------------//
  54. // activity管理:从列表中移除activity
  55. public void removeActivity(Activity activity) {
  56. activityList.remove(activity);
  57. }
  58. // activity管理:添加activity到列表
  59. public void addActivity(Activity activity) {
  60. activityList.add(activity);
  61. }
  62. // activity管理:结束所有activity
  63. public void finishAllActivity() {
  64. for (Activity activity : activityList) {
  65. if (null != activity) {
  66. activity.finish();
  67. }
  68. }
  69. }
  70. // 结束线程,一般与finishAllActivity()一起使用
  71. // 例如: finishAllActivity;finishProgram();
  72. public void finishProgram() {
  73. android.os.Process.killProcess(android.os.Process.myPid());
  74. }
  75. }