Android全局异闪退日记捕获---生存到私有目次

打印 上一主题 下一主题

主题 1007|帖子 1007|积分 3021

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import android.content.Context;
  2. import android.os.Build;
  3. import android.os.Environment;
  4. import android.util.Log;
  5. import java.io.File;
  6. import java.io.PrintWriter;
  7. import java.io.StringWriter;
  8. import java.io.Writer;
  9. import java.lang.Thread.UncaughtExceptionHandler;
  10. import java.text.SimpleDateFormat;
  11. import java.util.Date;
  12. public class CrashHandler implements UncaughtExceptionHandler {
  13.     private static final String TAG = "CrashHandler";
  14.     private static final String CRASH_DIR = "crashes";
  15.     private static final String CRASH_LOG_PATH = "crash_log.txt";
  16.     private Thread.UncaughtExceptionHandler defaultUEH;
  17.     private Context context;
  18.     private CrashHandler() {
  19.         this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
  20.     }
  21.     private static CrashHandler instance;
  22.     public static CrashHandler getInstance() {
  23.         if (instance == null) {
  24.             instance = new CrashHandler();
  25.         }
  26.         return instance;
  27.     }
  28.     public void init(Context context) {
  29.         this.context = context;
  30.         Thread.setDefaultUncaughtExceptionHandler(this);
  31.     }
  32.     @Override
  33.     public void uncaughtException(Thread t, Throwable e) {
  34.         if (e == null) {
  35.             if (defaultUEH != null) {
  36.                 defaultUEH.uncaughtException(t, e);
  37.             }
  38.             return;
  39.         }
  40.         // 收集异常信息
  41.         String exceptionInfo = collectExceptionInfo(e);
  42.         String deviceInfo = collectDeviceInfo();
  43.         saveCrashInfoToFile(deviceInfo, exceptionInfo);
  44.         // 如果系统提供了默认的未捕获异常处理,则交给系统去处理
  45.         if (defaultUEH != null) {
  46.             defaultUEH.uncaughtException(t, e);
  47.         }
  48.     }
  49.     private String collectDeviceInfo() {
  50.         StringBuilder deviceInfo = new StringBuilder();
  51.         // 可以添加更多设备信息
  52.         deviceInfo.append("Brand: ").append(Build.BRAND).append("\n");
  53.         deviceInfo.append("Model: ").append(Build.MODEL).append("\n");
  54.         deviceInfo.append("Android Version: ").append(Build.VERSION.RELEASE).append("\n");
  55.         return deviceInfo.toString();
  56.     }
  57.     private String collectExceptionInfo(Throwable e) {
  58.         Writer writer = new StringWriter();
  59.         PrintWriter printWriter = new PrintWriter(writer);
  60.         e.printStackTrace(printWriter);
  61.         Throwable cause = e.getCause();
  62.         while (cause != null) {
  63.             cause.printStackTrace(printWriter);
  64.             cause = cause.getCause();
  65.         }
  66.         printWriter.close();
  67.         String exceptionInfo = writer.toString();
  68.         Log.e("xxx",exceptionInfo);
  69.         return exceptionInfo;
  70.     }
  71.     private void saveCrashInfoToFile(String deviceInfo, String exceptionInfo) {
  72.         File dir =  context.getExternalFilesDir(CRASH_DIR);
  73.         if (!dir.exists()) {
  74.             dir.mkdirs();
  75.         }
  76.         File file = new File(dir, CRASH_LOG_PATH);
  77.         try {
  78.             PrintWriter printWriter = new PrintWriter(file);
  79.             printWriter.println(deviceInfo);
  80.             printWriter.println(exceptionInfo);
  81.             printWriter.close();
  82.         } catch (Exception e) {
  83.             Log.e(TAG, "An error occurred while writing crash info to file");
  84.         }
  85.     }
  86. }
复制代码
  1. import android.app.Application
  2. class MyApplication : Application() {
  3.     override fun onCreate() {
  4.         super.onCreate()
  5.         CrashHandler.getInstance().init(this)
  6.     }
  7. }
复制代码
生存的目次:
手机根目次->Android->data->com.xx.xx->files->crashes->crash_log.txt

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表