我们知道,由于android手机数量之多。我们写的应用在上线后很难保证应用是否会报错崩溃在个别的手机上。因此我们有必要采集崩溃信息,供开发人员分析修复。
幸运的是,android提供了处理这个问题的方法。在Thread类中,有一个setDefaultUncaughtExceptionHandler方法。可以设置系统的默认异常处理器。当应用crash的时候。UncaughtExceptionHandler的uncaughtException方法将会被回调。我们只需要实现一个UncaughtExceptionHandler对象即可。然后在uncaughtException方法中做我们想要做的事情。例如上传信息到服务器。
直接看代码:

public class CrashHandler implements Thread.UncaughtExceptionHandler {    private static CrashHandler INSTANCE = new CrashHandler();    private Context mContext;    private Thread.UncaughtExceptionHandler mDefaultHandler;    private CrashHandler() {    }    public static CrashHandler getInstance() {        return INSTANCE;    }    public void init(Context ctx) {        mContext = ctx;        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();        Thread.setDefaultUncaughtExceptionHandler(this);    }    @Override    public void uncaughtException(Thread thread, Throwable ex) {        handleException(ex);        if(mDefaultHandler != null){            mDefaultHandler.uncaughtException(thread,ex);        }else {            android.os.Process.killProcess(Process.myPid());        }    }    /** * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑 * * @param ex */    private void handleException(Throwable ex) {        PackageManager pm = mContext.getPackageManager();        try {            PackageInfo packageInfo = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);            L.i("App Version:"+packageInfo.versionName);            L.i("App VersionCode:"+packageInfo.versionCode);            L.i("os Version:"+Build.VERSION.RELEASE);            L.i("sdk:"+Build.VERSION.SDK_INT);            L.i("制造商:"+Build.MANUFACTURER);            L.i("手机型号:"+Build.MODEL);            L.i("cpu:"+Build.CPU_ABI+"..."+Build.CPU_ABI2);            L.i("异常信息:"+ex.getMessage());        } catch (PackageManager.NameNotFoundException e) {            e.printStackTrace();        }    }}

我们实现了UncaughtExceptionHandler这个接口,在init()方法中,我们获取到当前系统的默认异常处理对象mDefaultHandler,然后设置我们实现的这个对象被默认异常处理器。
在uncaughtException回调方法中。我们执行handleException方法来进行数据操作,把一些必要的数据上传到服务器可以。如果系统的默认的异常处理器则交给他处理。没有的话自己处理。结束应用。

最后记得的
application初始化的时候设置CrashHandler:

public class Myapplication extends Application {    public static Handler handler;    @Override    public void onCreate() {        super.onCreate();        CrashHandler crashHandler = CrashHandler.getInstance();        crashHandler.init(this);    }}

更多相关文章

  1. Android(安卓)性能优化(二)Handler运行机制原理,源码分析
  2. 关于Handler的理解
  3. Android(安卓)数据存储和文件使用案例分析
  4. ExifInterface使用,Android(安卓)2.0新增类
  5. [置顶] 在Android(安卓)2.3状态栏中增加menu,home和back快捷键的
  6. Android透明无边框圆形进度条之最简单实现
  7. android 使用AsyncTask实现异步下载文件
  8. android通过更改hosts免优酷广告方法
  9. 如何优雅的避免android(安卓)运行时崩溃

随机推荐

  1. Android自带实例分析开篇---Eclipse运行a
  2. EditText要求输入整数数字且要从1开始,不
  3. Android读取手机通讯录实现
  4. 浅谈RxJava与2.0的新特性
  5. Android画圆角矩形图片,并在图片上写字
  6. okhttp的应用详解与源码解析--http的发展
  7. Android(安卓)Studio 1.0 (稳定版) 完全
  8. Android颜色选择器
  9. 安卓按比例布局,layout_weight用法
  10. android的camera