针对以上的异常问题:个人综合网上的解决方式,供大家参考:
我遇到的问题是在android4.4.2系统上,程序会carsh。4.4以上正常,考虑是系统兼容性问题,最后通过第4种方法解决,在出现问题的activity的onCreate方法中删除了PersistableBundle persistentState参数,问题解决。
首先我们要知道如何排查问题;定位问题存在的 类或者方法:例如点击单个按钮出现的crash的排查方式:
注释法:注释掉 这个按钮实现的逻辑;如果还是存在crash;说明和这个按钮实现的逻辑么有关系;
替代法:我们可以 对一个按钮的点击效果通过不同的方式实现;例如:通过onclick()类,或者直接OnClickListen…(){} :测试导入的包是否正确;
查看xml:打开对应得xml文件,看看是否有自定义 view导致或者 某个属性写的有问题导致的crash.
以上方式 应该能解决 简单的点击按钮出现的错误了;
等 …
个人认为:定位问题同样是很重要的,也是解决问题的前提,你觉得呢?
异常的排查解决方式:
1:Manifest文件中注册的Activity的名称/包名 有没有写错 有些时候可能只写一个类名,前面用点号代替,但是这个类不在默认的包内,所以报这个错,那么只要写上类的全名,即可。
2: 看看libs中的libs包是否 完全导入到项目中;可以比较build.gradle中的包是否导入完全。
3:有一点也很重要,在Java Build Path面板下的Order and Export中,一定要把你引入的jar文件,勾上,否则,跟没引用一样。
4: 不兼容问题:这个只是在手机系统4.4出现这个crash;其他手机系统运行正常的 ;
通过测试发现:如下方法:
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
和如下方法的异同:多了这个参数PersistableBundle persistentState
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
注意:在写Activity的时候,如果使用了public 两个Bundle参数的方法,那么在4.4的机器上就会出现crash的情况!
就其原因暂时没有时间具体细看;但是本质上 上面的含有两个参数的方法其实走的 还是如下面的方法中的一个参数。所以 调整下 方法 即可。