一个项目被打包成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报错后,找到你存储报错信息的文件,打开查看便可看见与调试工具一样的调试信息。
网友评论