В чем разница между `writeValue` и`writeParcelable`?

Я искал способ передать объект из одной деятельности в другую. В разных руководствах говорилось, что лучший способ сделать это - сделать класс Parcelable. Мне удалось это реализовать, но у меня остался один вопрос.

Есть ссылка на другой подлежащий продаже объект (location) внутри класса Office. Этот урок говорит, чтобы сериализовать его, используя dest.writeParcelable(location, flags); а также in.readParcelable(LatLng.class.getClassLoader());, но парселлер создал код с 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 ответ

Решение

writeValue является более общим, и так как он принимает объект в качестве параметра, внутренне они проверяют instanceOf объект для вызова конкретного метода. Если вы знаете тип, я бы использовал конкретный

Другие вопросы по тегам