[英]“Don't keep activities” - when app is restored the fragment is visible only for a second
[英]Vector restored as ArrayList onRestoreInstanceState when Don't keep activities enabled
简单的测试案例100%可重复。 尝试在开发人员选项中启用“不要保留活动”。
1 - 在您的活动“Vector”(或Vector的任何子类)中成为会员。
2 - onSaveInstanceState使用“putSerializable”捆绑你的矢量成员
3 - 转到其他活动(例如按下按钮并打开新活动)
4 - 在新活动中,按后退按钮完成操作。
5 - 使shure从您在onCreate中收到的savedInstanceState包中获取向量。
6 - 崩溃!
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Vector
我做错了什么,还是在平台上坏了?
当通过bundle时,所有List将被重建为ArrayList。
在活动之间传输数据时,所有数据实现Serializable都将被写入字节流,并在新活动中重新创建它们。
当你调用bundle.getSerializable()时,它将使用android.os.Parcel中的 readValue()来获取值。 在Parcel.java的源代码中,当对象是List的子类时,它使用readArrayList()方法创建List,它不关心它是上一个活动中的Vector还是其他。
public final Object readValue(ClassLoader loader) {
int type = readInt();
switch (type) {
case VAL_STRING:
return readString();
...
case VAL_LIST:
return readArrayList(loader);
....
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.