web-dev-qa-db-ja.com

describeContents()はどこで/いつ使用されますか?

Parcelableのこのメソッドがどこで/いつ呼び出されるかを誰もが知っていますか?

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

オーバーライドする必要があります。しかし、それで何か役に立つことを検討する必要がありますか?

90
cody

Parcelableには_CONTENTS_FILE_DESCRIPTOR_と呼ばれる定数が定義されており、describeContents()でビットマスクの戻り値を作成するために使用されます。

API ref の_CONTENTS_FILE_DESCRIPTOR_の説明は次のとおりです。

DescribeContents()で使用するビットマスク:各ビットは、マーシャリングされたときに潜在的な特別な重要性があると見なされるオブジェクトの種類を表します。

つまり、FileDescriptorオブジェクトをParcelableに配置する必要がある場合、describeContents()の戻り値として_CONTENTS_FILE_DESCRIPTOR_を指定する必要があります(つまり、 "special object) "(describeContents()の説明で)本当に意味するのは、FileDescriptorです。

この全体Parcelable機能は未完成のように見えます(読み取り:デザインが悪い)。ドキュメントにはもう1つの奇妙なことがあります。

Parcelableインターフェースを実装するクラスには、CREATORという静的フィールドも必要です。これは、Parcelable.Creatorインターフェースを実装するオブジェクトです。

人間が読める形式で定義されたルールによる多重継承を実装していますか? :-)

C++プログラマーがParceableを設計し、ある時点で彼が気付いたようです。ああ、いまいましい、Javaには多重継承はありません... :-)

177
Ognyan

0またはCONTENTS_FILE_DESCRIPTORの2つの値のみが可能です

pOLOをシリアル化する場合、この値は常に0である必要があります。CONTENTS_FILE_DESCRIPTORは ParcelFileDescriptor のために予約されており、* unixシステムでファイル記述子(FD)をシリアル化できます。

4
bowman han