可在何处/何时使用describeContents()?


93

有谁知道在何处/何时调用此Parcelable方法?

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

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


似乎没人知道..?:-/
科迪

Answers:


181

有在规定的恒定Parcelable称为CONTENTS_FILE_DESCRIPTOR这是指在所使用describeContents()创建位掩码返回值。

API参考CONTENTS_FILE_DESCRIPTOR中的说明为:

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

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

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

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

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

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


2
感谢您的详细说明。在对本教程感到沮丧之后,我发现您的答案是声称describeContents()只要“没有什么特别之处”,都应返回0 。哪一点都不能解释。您的解释非常清楚!
WebViewer 2014年

1
@LeoLink android.os.ParcelFileDescriptor
Ognyan 2014年

7
这与多重继承无关。您不能在Java接口中定义静态方法,而不能在Android中使用的版本中定义静态方法,因此不能定义CREATOR字段。
Aleks N.

1
@Ogre_BGR我还是不明白。也许您可以显示一个示例代码说明它何时可能有用?
Android开发人员

2
@androiddeveloper我认为不应该在“常规”应用程序开发中使用。似乎仅本机方法使用它以便在进程之间传递信息。请查看InputChannel.java(描述注释的类)和android_os_Parcel.cpp
Ognyan,2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.