失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 代码:android崩溃日志收集和处理

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

时间:2019-02-21 23:28:23

相关推荐

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

用来处理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);}//异常崩溃发生时调用的方法,这里面开始我们想要的操作,包括日志的手机和上传等@Overridepublic 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崩溃日志收集和处理》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。