BUG捕捉与保存

作者: 阿运鸣鸣 | 来源:发表于2018-03-06 11:36 被阅读0次

        一个项目被打包成apk安装包后,安装到手机上之后,运行时若是出现报错我们是没法调试的,为了更好的解决报错,我们可以建立一个捕捉报错的类,将报错信息以文件形式保存在手机本地。这样我们就可以在没有调试工具的时候也可以查看报错信息了。

(这里说明一下,这是我早年在网上学的,出处早就不知道是哪里了。)

以下为捕捉报错和保存保存信息的类

/**

* Created by ayun on 2018/1/24.

*/

public class CrashHandlerimplements Thread.UncaughtExceptionHandler {

private static Thread.UncaughtExceptionHandlermDefaultCrashHandler;

private static CrashHandlermCrashHandler =new CrashHandler();

private ContextmContext;

private CrashHandler() {

}

public static CrashHandler getInstance() {

return mCrashHandler;

}

public void init(Context context) {

mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();

Thread.setDefaultUncaughtExceptionHandler(this);

mContext = context.getApplicationContext();

}

@Override

    public void uncaughtException(Thread thread, Throwable ex) {

try {

//将文件写入sd卡

            writeToSDcard(ex);

//写入后在这里可以进行上传操作

        }catch (IOException e) {

e.printStackTrace();

}catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

ex.printStackTrace();

//如果系统提供了默认异常处理就交给系统进行处理,否则自己进行处理。

        if (mDefaultCrashHandler !=null) {

mDefaultCrashHandler.uncaughtException(thread, ex);

}else {

android.os.Process.killProcess(android.os.Process.myPid());

}

}

//将异常写入文件

    private void writeToSDcard(Throwable ex)throws IOException, PackageManager.NameNotFoundException {

//如果没有SD卡,直接返回

        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

return;

}

File filedir =new File(ConstantLib.BUGFILE_PATH);

if (!filedir.exists()) {

filedir.mkdirs();

}

long currenttime = System.currentTimeMillis();

String time =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(currenttime));

//建立一个文件夹存放记录。

        File exfile =new File(ConstantLib.BUGFILE_PATH+ConstantLib.BUGFILE__NAME+time + ConstantLib.BUGFILE__SUFFIX);

PrintWriter pw =new PrintWriter(new BufferedWriter(new FileWriter(exfile)));

pw.println(time);

PackageManager pm =mContext.getPackageManager();

PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);

//当前版本号

        pw.println("App Version:" + pi.versionName +"_" + pi.versionCode);

//当前系统

        pw.println("OS version:" + Build.VERSION.RELEASE +"_" + Build.VERSION.SDK_INT);

//制造商

        pw.println("Vendor:" + Build.MANUFACTURER);

//手机型号

        pw.println("Model:" + Build.MODEL);

//CPU架构

        pw.println("CPU ABI:" + Build.CPU_ABI);

ex.printStackTrace(pw);

pw.close();

}

}

以下为使用方式:

在Application里面onCreate的方法中初始化:CrashHandler.getInstance().init(this);

查看效果:

当app报错后,找到你存储报错信息的文件,打开查看便可看见与调试工具一样的调试信息。

相关文章

  • BUG捕捉与保存

    一个项目被打包成apk安装包后,安装到手机上之后,运行时若是出现报错我们是没法调试的,为了更好的解决报错,我们可以...

  • DirectShow 接口说明文档

    WCHAR wszCaptureFile[_MAX_PATH]; // 捕捉文件的路径,该文件保存捕捉到的视频 ...

  • 2017年02月23号

    昨天上的补丁交叉检查没做好!今天处理了几个问题还差保存的,还有还款单的bug以及bug系统的bug.

  • Python基础-14异常处理

    14.异常处理     只要是人编写的代码,或多或少都会存在一些Bug,当这些Bug被程序捕捉之后,需要怎么处理,...

  • Android studio( build.gradle)打包之

    线上APP出现BUG问题,但是BUG信息是混淆后的类文件路径,不利于BUG原因的查询和解决,首先我们要做的就是保存...

  • 接触用户(三)

    (四)BUG反馈及处理方式: ①写作内容保存,发布不了: 已经修复BUG,将新版APP链接给用户,让用户重新安...

  • CrashHandler全局捕捉异常

    前言 在Android开发中,捕获异常是件十分重要的事。修复bug都是从捕捉bug信息开始。在上一节中,我们已经讲...

  • git-分支2

    修复bug,需要在需要修复的节点创建分支,修复后合并,手头任务没有完成先保存,回头再弄git stash 保存现在...

  • CrashHandler自定义异常处理

    调用 当捕捉到异常,会在本地保存一个这些格式的文件:

  • LiveData和Fragment的奇妙"BUG"

    "Bug"再现 在Activity中保存一个ViewModel,使用Navigation组件和Fragment实现...

网友评论

    本文标题:BUG捕捉与保存

    本文链接:https://www.haomeiwen.com/subject/sjulfftx.html