项目上线一段时间后,加入了公司的监控平台,奔溃还真是不少。。公司的无线环境和高配置的手机几乎任何bug都没测出来,经过一段时间的fix,总结下结果防止以后再犯同样的错误
B1: java.lang.ClassCastException
出现这个错误表示很蛋疼,原因是我们居然导入了两个不同版本的zxing包,这个问题是由于大意造成的以后一定要清理包中无用的代码,特别是功能相同已经被废弃的代码
B2: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
在使用Fragment的时候,这个bug几乎经常出现,当我们在Activity的onCreate方法中加入一个Fragment时不会出现这个问题,但是当我们通过一个异步回调添加的时候会出现这个问题;当Activity的状态已经调用了onSaveInstanceState 的时候,当前Activity 的状态已经结束了,此时你还强制性的去添加一个Fragment异常就此产生;
解决方案:提交fragment时使用commitAllowingStateLoss而不是commt,允许Activity状态丢失
B3: java.lang.IllegalStateException: Fragment a{44629768} not attached to Activity 这个错误出现了两种情况
1: android.support.v4.app.Fragment.getResources
在Fragment中获取资源信息是解决使用了fragment自带的getResource ,而此时fragment还未attach到Activity上
解决方案:使用Activity的getResource 或者使用当前应用的Application的getResource
2:android.support.v4.app.Fragment.startActivityForResult
异步回调后未对Activity的状态做判断
解决方案:每次异步回调的时候在回调方法最前面判断当前Fragment所在的Activity是否还存在 ---》
if (getActivity() == null || getActivity().isFinishing()
|| MyFragment.this.isDetached()) {
return;
}
B4: java.lang.IllegalStateException: Activity has been destroyed
由于异步回调后Activity已经销毁
解决方案
if (getActivity() == null || getActivity().isFinishing()
|| MyFragment.this.isDetached()) {
return;
}