`writeValue`和`writeParcelable`有什么区别?

时间:2015-10-12 08:53:17

标签: android parcelable

我一直在寻找一种方法将一个对象从一个Activity传递给另一个Activity。 不同的教程指出,最好的方法是使类Parcelable。我已设法实现它,但我还有一个问题。

Office类中有另一个可分配对象(location)的引用。 This教程告诉您使用dest.writeParcelable(location, flags);in.readParcelable(LatLng.class.getClassLoader());对其进行序列化,但parcelabler使用dest.writeValue(location);然后(LatLng) in.readValue(LatLng.class.getClassLoader());创建了代码。 我已经检查过并且两种方式都有效。

有人可以解释一下这两种方法有什么区别?出于某些原因,他们中的任何一个更好吗谢谢!

public class Office implements Parcelable {

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<Office> CREATOR = new Parcelable.Creator<Office>() {
        @Override
        public Office createFromParcel(Parcel in) {
            return new Office(in);
        }

        @Override
        public Office[] newArray(int size) {
            return new Office[size];
        }
    };

    public final String name;
    public final String address;
    public final LatLng location;

    public Office(String name, String address, LatLng location) {
        this.name = name;
        this.address = address;
        this.location = location;
    }

    protected Office(Parcel in) {
        name = in.readString();
        address = in.readString();
//        location = (LatLng) in.readValue(LatLng.class.getClassLoader());
        location = in.readParcelable(LatLng.class.getClassLoader());
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(address);
//        dest.writeValue(location);
        dest.writeParcelable(location, flags);
    }
}

1 个答案:

答案 0 :(得分:2)

writeValue更通用,因为它将Object作为参数,所以在内部检查instanceOf对象以调用特定方法。如果您知道类型,我会坚持使用特定的