Parcelable在哪里/何时使用describeContents()?

问题描述 投票:92回答:2

有人知道Parcelable的此方法在哪里/何时被调用吗?

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

必须被覆盖。但是我应该考虑做些有用的事情吗?

android serialization parcelable parcel
2个回答
181
投票

Parcelable中定义了一个称为CONTENTS_FILE_DESCRIPTOR的常量,该常量将在describeContents()中用于创建位掩码返回值。

CONTENTS_FILE_DESCRIPTOR中对API ref的描述是:

与describeContents()一起使用的位掩码:每个位代表一种被编组后被认为具有潜在特殊意义的对象。

这实际上意味着:如果需要将FileDescriptor对象放入Parcelable中,则应该/必须将CONTENTS_FILE_DESCRIPTOR指定为describeContents()的返回值,即通过“ 特殊对象”(在describeContents()的描述),它们的真正含义是:FileDescriptor

整个Parcelable功能似乎未完成(阅读:设计不良)。文档中还有另外一件奇怪的事情:

实现Parcelable接口的类还必须具有称为CREATOR的静态字段,该字段是实现Parcelable.Creator接口的对象

通过以人类可读形式定义的规则实现多重继承? :-)

似乎是C ++程序员设计的Parceable,在某种程度上他意识到:哦,该死,Java中没有多重继承...:-)


6
投票

只有两个可能的值,0或CONTENTS_FILE_DESCRIPTOR

如果要序列化POLO,则此值应始终为0,CONTENTS_FILE_DESCRIPTOR是为ParcelFileDescriptor保留的,可以在* unix系统中序列化文件描述符(FD)。

© www.soinside.com 2019 - 2024. All rights reserved.