如何在Android中使用CrashHandler获取应用的崩溃信息

  介绍

如何在Android中使用CrashHandler获取应用的崩溃信息吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>一、线程类中的setDefaultUncaughtExceptionHandler

public  static  void  setDefaultUncaughtExceptionHandler (UncaughtExceptionHandler 处理程序),{,,   Thread.defaultUncaughtHandler =,才能处理,,,   }

这个方法其实就可以解决我们应用程序的崩溃问题,设置系统默认异常处理器,当系统发生崩溃时,系统就会回调UncaughtExceptionHandler的uncaughtException方法,在uncaughtException方法中就可以获取到异常信息,可以选择把异常信息存储下来,存储方式大家可以自己选择,然后在合适的时候通过网络将崩溃信息上传到服务器上,这样我们开发人员就可以分析用户崩溃的场景从而在后面的版本中进行修复,我们还可以在发生事故发生时弹出一个对话框,告诉用户程序崩溃了,然后再退出

<强>二,实现自己的异常捕获类

1)建立异常处理程序,命名为CrashHandler,代码如下

,   public  class  CrashHandler  implements  Thread.UncaughtExceptionHandler  {,   ,   private 才能static  final  String  TAG =,“CrashHandler",,   private 才能static  final  boolean  DEBUG =,真的,,   ,   private 才能static  final  String  PATH =, Environment.getExternalStorageDirectory () .getPath (), +,“/ryg_test/日志/?   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  getInstance (), {,   ,,,return  sInstance;,   ,,},   ,/* *,才能   ,,*,初始化,   ,,*,   ,,*,@param  context    ,,*/,   ,   public 才能;void  init (Context 上下文),{,   ,,,//获取系统默认的异常处理器,   ,,,mDefaultCrashHandler =, Thread.getDefaultUncaughtExceptionHandler (),,   ,,,//将当前实例设为系统默认的异常处理器,   ,,,Thread.setDefaultUncaughtExceptionHandler(这个),,   ,,,//获取背景下,方便内部使用,   ,,,mContext =, context.getApplicationContext (),,   ,,},   ,/* *,才能   ,,*,这个是最关键的函数,当程序中有未被捕获的异常,系统将会自动调用# uncaughtException方法,   ,,*,线程为出现未捕获异常的线程,为交货未捕获的异常,有了这个throwable,我们就可以得到异常信息,   ,,*,   ,,*,@param  thread    ,,*,@param  throwable    ,,*/,   @Override 才能;   public 才能;void  uncaughtException (Thread ,线程,Throwable  throwable), {,   ,,,try  {,   ,,,,,//导出异常信息到SD卡中,   ,,,,,dumpExceptionToSDCard (throwable);,   ,,,,,//这里可以通过网络上传异常信息到服务器,便于开发人员分析日志从而解决bug    ,,,,,uploadExceptionToServer (),,   ,,,},catch  (IOException  e), {,   ,,,,,e.printStackTrace (),,   ,,,},   ,   ,,,//打印出当前调用栈信息,   ,,,throwable.printStackTrace (),,   ,   ,,,//如果系统提供了默认的异常处理器,则交给系统去结束我们的程序,否则就由我们自己结束自己,   ,,,if  (mDefaultCrashHandler  !=, null), {,   ,,,,,mDefaultCrashHandler.uncaughtException(线程,throwable);,   ,,,},else  {,   ,,,,,android.os.Process.killProcess (android.os.Process.myPid ()),,   ,,,},   ,,},   ,/* *,才能   ,,*,保存到内存卡,   ,,*,这里我们也可以根据项目需要选择其他的保存方式,   ,,*,   ,,*,@param  throwable    ,,*,@throws  IOException    ,,*/,   private 才能;void  dumpExceptionToSDCard (Throwable  throwable), throws  IOException  {,   ,,,//如果SD卡不存在或无法使用,则无法把异常信息写入SD卡,   ,,,if  (! Environment.getExternalStorageState () .equals (Environment.MEDIA_MOUNTED)), {,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在Android中使用CrashHandler获取应用的崩溃信息