Android异常与性能优化之crash异常处理

Android异常与性能优化之crash异常处理,第1张

概述Android应用总是会不可避免的发生crash,也就是崩溃。Android提供了处理这类问题的方法,当crash发生的时候,系统就会回调UncaughtExceptionHandler的uncaughtException方法。在uncaughtException方法中就可以获取到异常信息,可以选择将异常信息存储到sd卡,然后在合适的时候将其上

AndroID应用总是会不可避免的发生crash,也就是崩溃。AndroID提供了处理这类问题的方法,当crash发生的时候,系统就会回调UncaughtExceptionHandler的uncaughtException方法。在uncaughtException方法中就可以获取到异常信息,可以选择将异常信息存储到sd卡,然后在合适的时候将其上传到服务器。

实现方法:

<1> 创建一个类CrashHanlder继承UnCaughtExceptionHandler,实现里面的uncaughtException方法

 public class CrashHandler implements Thread.UncaughtExceptionHandler {     private static CrashHandler crashHandler;     private Context context;     private Thread.UncaughtExceptionHandler mDefaultCrashHandler;     private static final String PATH = Environment.getExternalStorageDirectory().getPath() + "/crash/log/";     private static final String file_name = "crash";     private static final String file_name_SUFFIX = ".trace";     public static CrashHandler getInstance(){         if(crashHandler == null){             crashHandler = new CrashHandler();         }         return crashHandler;     }     public voID init(Context context){         context = context.getApplicationContext();         //设置系统默认异常处理器         Thread.setDefaultUncaughtExceptionHandler(this);         mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();     }     @OverrIDe     public voID uncaughtException(Thread t, Throwable e) {         try {             //将异常信息导出到SD卡中             dumpExceptionToSDCard(e);//               //上传异常信息到服务器,以便开发人员分析//               uploadExceptionToServer();         }catch (Exception e1){             e1.printstacktrace();         }         e.printstacktrace();         		 if(mDefaultCrashHandler != null){             mDefaultCrashHandler.uncaughtException(t,e);         }else{             Process.killProcess(Process.myPID());         }     }     private voID dumpExceptionToSDCard(Throwable ex) throws Exception{         //判断SD卡是否存在或能否使用,不存在或无法使用就返回         if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){             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);         if(!file.exists()){             file.createNewfile();         }     PrintWriter pw = new PrintWriter(new BuffereDWriter(new fileWriter(file)));     pw.println(time);     dumpPhoneInfo(pw);     pw.println();     ex.printstacktrace(pw);    }     private voID dumpPhoneInfo(PrintWriter pw) throws PackageManager.nameNotFoundException {         PackageManager pm = context.getPackageManager();         PackageInfo pi = pm.getPackageInfo(context.getPackagename(),PackageManager.GET_ACTIVITIES);         pw.println("APP Version");         pw.println(pi.versionname);         pw.println("_");         pw.println(pi.versionCode);         //AndroID版本号         pw.println("OS Version: ");         pw.println(Build.VERSION.RELEASE);         pw.println("_");         pw.println(Build.VERSION.SDK_INT);         //手机制造商         pw.println("vendor:");         pw.println(Build.MANUFACTURER);         //手机号         pw.println("Model:");         pw.println(Build.MODEL);         //cpu架构         pw.println("cpu ABI:");         pw.println(Build.cpu_ABI);     } }	

<2> 在Application的onCreate方法中调用

     CrashHandler crashHandler = CrashHandler.getInstance();	 crashHandler.init(this);
总结

以上是内存溢出为你收集整理的Android异常与性能优化之crash异常处理全部内容,希望文章能够帮你解决Android异常与性能优化之crash异常处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1116543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存