美文网首页
代码:android崩溃日志收集和处理

代码:android崩溃日志收集和处理

作者: WhenMeet | 来源:发表于2018-01-02 22:04 被阅读78次

        用来处理android崩溃日志收集的代码,详情的使用请转:android崩溃日志收集和处理

    第一个类

    /**

    * 异常捕捉实现类

    */

    public class ErrorCaughtimplements Thread.UncaughtExceptionHandler {

    private ErrorHandleerrHandle;

    //设置本程序的异常崩溃由此类处理

        public ErrorCaught(Application context){

    Thread.UncaughtExceptionHandler uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();

    errHandle =new ErrorHandle(context , uncaughtExceptionHandler);

    Thread.setDefaultUncaughtExceptionHandler(this);

    }

    //异常崩溃发生时调用的方法,这里面开始我们想要的操作,包括日志的手机和上传等

        @Override

        public void uncaughtException(Thread thread, Throwable throwable) {

    errHandle.excute(thread, throwable);

    }

    }

    第二个类

    /**

    * 异常具体处理类

    */

    public class ErrorHandle {

    private Contextcontext;

    private Thread.UncaughtExceptionHandleruncaughtExceptionHandler;

    private FilecrashFile;

    //新建的时候,随即的开始建造崩溃文件夹和崩溃文件

        public ErrorHandle(Application context, Thread.UncaughtExceptionHandler uncaughtExceptionHandler) {

    this.context = context;

    this.uncaughtExceptionHandler = uncaughtExceptionHandler;

    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {

    File file =new File(Environment.getExternalStorageDirectory(),"crashCollection");

    if (!file.exists()) {

    file.mkdirs();//创建崩溃捕捉所在文件夹

                }

    crashFile =new File(file, getCrashFileName());

    if (!crashFile.exists()) {

    try {

    crashFile.createNewFile();//创建崩溃捕捉文件

                    }catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    //用来执行崩溃时具体的操作

        public void excute(Thread thread, Throwable throwable) {

    CrashInforMationDetail crashInforMationDetail = CrashInforMationDetail.produce(throwable, thread,context);

    crashInforMationDetail.writeToFile(crashFile);

    signOut(thread, throwable);

    }

    //强制退出软件

        public void signOut(Thread thread, Throwable throwable) {

    if (uncaughtExceptionHandler !=null) {

    uncaughtExceptionHandler.uncaughtException(thread, throwable);

    }else {

    android.os.Process.killProcess(android.os.Process.myPid());

    System.exit(1);

    }

    }

    //获取崩溃文件名称,具体是年月日组成的文件名

        private String getCrashFileName() {

    StringBuilder stringBuilder =new StringBuilder();

    Calendar calendar = Calendar.getInstance();

    int year = calendar.get(Calendar.YEAR);

    int month = calendar.get(Calendar.MONTH);

    int date = calendar.get(Calendar.DATE);

    stringBuilder.append("crash_");

    stringBuilder.append(year +"-");

    stringBuilder.append(month +"-");

    stringBuilder.append(date);

    stringBuilder.append(".txt");

    return stringBuilder.toString();

    }

    }

    第三个类

    /**

    * 获取崩溃日志的具体内容,这里做了两个处理,一个是错误信息输入文件,一个是把错误信息变成字符串

    */

    public class CrashInforMationDetail {

    private static StringcrashInfor;//崩溃日志的具体内容

        private CrashInforMationDetail() {

    }

    //获取错误等信息

        public static CrashInforMationDetail produce(Throwable throwable, Thread thread, Context context) {

    ByteArrayOutputStream out =new ByteArrayOutputStream();

    PrintStream print =new PrintStream(out);

    out.toString();

    print.append("crahtime:" + System.currentTimeMillis()).append("\n");

    print.append(getSysytemInfor());

    print.append("theadName:" + thread.getName() +"\n").append("threadID:" + thread.getId() +"\n");

    crashInfor =getSysytemInfor() +"threadName:" + thread.getName() +"\n" +"threadID:" + thread.getId() +"\n" +"ErrorInformation:" + throwable.getMessage();

    print.append(throwable.getMessage()).append("\n");

    StackTraceElement[] stackTrace = throwable.getStackTrace();

    try {

    for (int i =0; i < stackTrace.length; i++) {

    StackTraceElement stackTraceElement = stackTrace[i];

    String trace = stackTraceElement.toString();

    print.append(trace +"\n");

    crashInfor += trace +"\n";

    }

    }catch (Exception e) {

    e.printStackTrace();

    }

    Log.d("crashInfor",crashInfor);

    throwable.printStackTrace(print);

    return new CrashInforMationDetail();

    }

    //把错误信息填充进崩溃文件中

        public void writeToFile(File file) {

    PrintWriter printer =null;

    try {

    BufferedOutputStream out =new BufferedOutputStream(new FileOutputStream(file,true));

    printer =new PrintWriter(out);

    printer.println(crashInfor);

    printer.flush();

    }catch (IOException e) {

    e.printStackTrace();

    }finally {

    if (printer !=null) {

    printer.close();

    }

    }

    }

    //获取手机的一些设备参数

        public static String getSysytemInfor() {

    StringBuffer sb =new StringBuffer();

    sb.append("主板:" + Build.BOARD +"\n");

    sb.append("系统启动程序版本号:" + Build.BOOTLOADER +"\n");

    sb.append("系统定制商:" + Build.BRAND +"\n");

    sb.append("cpu指令集:" + Build.CPU_ABI +"\n");

    sb.append("cpu指令集2:" + Build.CPU_ABI2 +"\n");

    sb.append("设置参数:" + Build.DEVICE +"\n");

    sb.append("显示屏参数:" + Build.DISPLAY +"\n");

    sb.append("无线电固件版本:" + Build.getRadioVersion() +"\n");

    sb.append("硬件识别码:" + Build.FINGERPRINT +"\n");

    sb.append("硬件名称:" + Build.HARDWARE +"\n");

    sb.append("HOST:" + Build.HOST +"\n");

    sb.append("修订版本列表:" + Build.ID +"\n");

    sb.append("硬件制造商:" + Build.MANUFACTURER +"\n");

    sb.append("版本:" + Build.MODEL +"\n");

    sb.append("硬件序列号:" + Build.SERIAL +"\n");

    sb.append("手机制造商:" + Build.PRODUCT +"\n");

    sb.append("描述Build的标签:" + Build.TAGS +"\n");

    sb.append("TIME:" + Build.TIME +"\n");

    sb.append("builder类型:" + Build.TYPE +"\n");

    sb.append("USER:" + Build.USER +"\n");

    return sb.toString();

    }

    public String getString() {

    return crashInfor;

    }

    }

    相关文章

      网友评论

          本文标题:代码:android崩溃日志收集和处理

          本文链接:https://www.haomeiwen.com/subject/bgxcnxtx.html