为什么 Parcel.writeBoolean(boolean) 不存在?

Why Parcel.writeBoolean(boolean) doesn't exist?

当我需要将 boolean 写入 Parcel 时,我会这样做:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(myBoolean ? 1 : 0);
}

但是,方法writeBoolean不存在有什么原因吗?

您可以使用掩码和移位将您的布尔值打包成一个字节。那将是最有效的方式,并且可能是他们希望您做的。

检查此 link https://developer.android.com/reference/android/os/Parcel.html

的基元部分

打包你的布尔值..你可以使用http://www.parcelabler.com/

例如:

class BooleanSample {
    Boolean flag;
}

结果:

class BooleanSample implements Parcelable {
    Boolean flag;

    protected BooleanSample(Parcel in) {
        byte flagVal = in.readByte();
        flag = flagVal == 0x02 ? null : flagVal != 0x00;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if (flag == null) {
            dest.writeByte((byte) (0x02));
        } else {
            dest.writeByte((byte) (flag ? 0x01 : 0x00));
        }
    }

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

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