Android---Crash三部曲---收集
2017-01-17 17:24
162 查看
通过CrashHandler来监视应用的crash信息,给程序设置野鬼CrashHandler,这样当程序crash时就会调用CrashHandler的uncaughtException方法.在这个方法中我们可以获取crash信息并上传到服务器
public class CrashHandler implements Thread.UncaughtExceptionHandler { private static final String TAG = "CrashHandler"; boolean DEBUG=true; private static final String PATH= Environment.getExternalStorageDirectory().getPath()+"/CrashTest/log/"; private static final String FILE_NAME="Crash"; private static final String FILE_NAME_SUFFIX=".trace"; private static CrashHandler sInstance=new CrashHandler(); private Thread.UncaughtExceptionHandler mDefaultCrashHandler; private Context mContext; private CrashHandler(){ } public static CrashHandler getsInstance(){ return sInstance; } public void init(Context context){ mDefaultCrashHandler=Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); mContext=context.getApplicationContext(); Log.e("------","执行了 CrashHandler"); } //这里是最关键的方法,当层序中有未捕获的异常时.系统将会自动调用 uncaughtException这个方法 @Override public void uncaughtException(Thread thread, Throwable ex) { //Thread 为未捕获异常的线程 //Throwable 为未捕获的异常 //如果系统提供了默认的异常处理器,就交给系统区结束程序,否则就自己结束自己 if (mDefaultCrashHandler!=null){ //判断系统提供了默认的异常处理器没有 如果不为空就是有 mDefaultCrashHandler.uncaughtException(thread,ex); }else { Process.killProcess(Process.myPid()); } Log.e("------","执行了 CrashHandler"); } private void dumpExceptionToSDCard (Throwable ex)throws IOException{ //如果SD卡不存在或者无法使用,则无法把异常写入在SD卡中 if (!Environment.getExternalStorageState() .equals(Environment.MEDIA_MOUNTED)){ if (DEBUG){ Log.w(TAG,"SDCard 出现异常 skip dump exception"); return; } } File dir=new File(PATH); if (!dir.exists()){ dir.mkdirs(); } long current=System.currentTimeMillis(); String time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current)); File file=new File(PATH+FILE_NAME+time+FILE_NAME_SUFFIX); Log.e("------","执行了 CrashHandler"); try { //向文本输出流.一种过滤流,也叫处理流 PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter(file))); pw.println(time); dumpPhoneInfo(pw); pw.println(); ex.printStackTrace(pw); pw.close(); } catch (IOException e) { Log.e(TAG,"dump crash info failed"); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } private void dumpPhoneInfo(PrintWriter pw) throws PackageManager.NameNotFoundException { PackageManager pm=mContext.getPackageManager(); PackageInfo pi=pm.getPackageInfo( mContext.getPackageName(),PackageManager.GET_ACTIVITIES); pw.print("AppVersion: "); pw.print(pi.versionName); pw.print('_'); pw.println(pi.versionCode); //Android版本号 pw.print("OS Version:"); pw.print(Build.VERSION.RELEASE); pw.print("_"); pw.println(Build.VERSION.SDK_INT); //手机制造商 pw.print("Vendor:" ); pw.println(Build.MANUFACTURER); //手机型号 pw.print("Model: "); pw.println(Build.MODEL); //CPU架构 pw.print("CPU ABI: "); pw.println(Build.CPU_ABI); } }
相关文章推荐
- Android应用Crash信息收集
- Android开发中Crash异常收集与统计分析(一、Java语法相关异常)
- Android Crash日志收集
- Android crash 收集
- android 程序崩溃信息的收集【使用CrashHandler来收集应用的crash信息】
- Android客户端收集Crash信息的常用方法
- monkey自动化测试与持续集成方案--Android crash 收集
- android App级别的bug信息收集(crash信息保存和发送)
- 自动化测试与持续集成方案--Android crash 收集
- Android中Crash收集
- android异常收集错误信息并保存到crash文件夹下
- Android开发——收集应用Crash信息到服务器
- Android 全局异常捕获之CrashHandler,用于开发者收集获取异常信息
- Android 中Crash时如何获取异常信息详解及实例
- [Android]如何调试Native memory crash issue
- Android--开发人员不得不收集的代码
- android 自己采集crash信息
- android和iOS平台的崩溃捕获和收集
- Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法