繁体   English   中英

当不保持活动启用时,向量恢复为ArrayList onRestoreInstanceState

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM