6

一些放在 Intent/bundle 中的 parcelables 对象可能会干扰自己并损害 Intent/Bundle 的读取?

我在我认为有问题的地方提取代码。此代码有效:

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeParcelable(object1, arg1);
    arg0.writeTypedList(arraylist1); 

}

public void readFromParcel(Parcel in) {
    object1  = in.readParcelable(object1.class.getClassLoader());
    arraylist1 = new ArrayList<object3>();
    in.readTypedList(arraylist1, object3.CREATOR);
   }

但是如果我添加一个其他复杂的 parcelable 对象(使用实习生 parcelable ArrayList):

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeParcelable(object1, arg1);
    arg0.writeParcelable(object2, arg1);
    arg0.writeTypedList(arraylist1); 

}

public void readFromParcel(Parcel in) {
    object1  = in.readParcelable(object1.class.getClassLoader());
    object2 = in.readParcelable(object2.class.getClassLoader());
    arraylist1 = new ArrayList<object3>();
    in.readTypedList(arraylist1, object3.CREATOR);
   }

我为 arraylist1 获得了一个包含更多 10000000 个元素的毛球(或其他难以理解的问题)

虽然如果我用arraylist1删除行,它可以工作:

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeParcelable(this.object1, arg1);
    arg0.writeParcelable(this.object2, arg1); 

}

public void readFromParcel(Parcel in) {
    object1  = in.readParcelable(object1.class.getClassLoader());
    object2 = in.readParcelable(object2.class.getClassLoader());
   } 

我试图制作一个扩展 ArrayList 并实现 Parcelable 的对象,但我还有一些其他问题(如 android.os.BadParcelableException: ClassNotFoundException when unmarshalling:)

如果这些对象相互干扰,那么我必须使用几个捆绑包将这些不同的对象放入同一个意图中?

4

1 回答 1

7

我想我有一天也遇到了同样的问题。据我所知,我总是在所有其他类型之后通过写/读 Parcelable 来修复它。就像是:

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeTypedList(arraylist1); 

    arg0.writeParcelable(object1, arg1);
    arg0.writeParcelable(object2, arg1);
}

public void readFromParcel(Parcel in) {
    arraylist1 = new ArrayList<object3>();
    in.readTypedList(arraylist1, object3.CREATOR);

    object1  = in.readParcelable(object1.class.getClassLoader());
    object2 = in.readParcelable(object2.class.getClassLoader());
}

(虽然没有尝试过这段代码)

于 2011-05-11T10:35:03.167 回答