Android报错对抗

BUG捕捉与保存

2018-03-06  本文已影响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报错后,找到你存储报错信息的文件,打开查看便可看见与调试工具一样的调试信息。

上一篇 下一篇

猜你喜欢

热点阅读