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


93

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

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

オーバーライドする必要があります。しかし、私はそれで何か便利なことをすることを考えるべきでしょうか?


誰もアイデアを持っていないようです。:-/
cody

回答:


181

で使用されることを意図してParcelable呼び出された定数が定義されCONTENTS_FILE_DESCRIPTORていますdescribeContents()ビットマスク戻り値を作成することは。

APIリファレンスCONTENTS_FILE_DESCRIPTORでの説明は次のとおりです。

describeContents()で使用するビットマスク:各ビットは、マーシャリング時に潜在的に特別な意味を持つと見なされる一種のオブジェクトを表します。

これは本当に意味:あなたは配置する必要がある場合はFileDescriptorParcelableにオブジェクトをあなたは/指定しなければならないはずですCONTENTS_FILE_DESCRIPTOR「によって、すなわち、)(describeContentsの戻り値として特別なオブジェクト(で」describeContents()彼らは本当に平均の説明): FileDescriptor

このParcelableの機能全体が完成していないように見えます(読み取り:設計が不適切です)。ドキュメントには他にも奇妙なことが1つあります。

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

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

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


2
この詳細な説明をありがとう。「特別なことは何もない」場合は常に0を返す必要があると主張するこのチュートリアルにイライラした後、私はあなたの答えを見つけました。これは実際には何も説明しません。あなたの説明はとても明確です!describeContents()
WebViewer 2014年

1
@LeoLink android.os.ParcelFileDescriptor
Ognyan '21年

7
多重継承についてではありません。Androidで使用されているバージョンではなく、Javaインターフェースで静的メソッドを定義できないため、このCREATORフィールドが定義されています。
Aleks N. 2014

1
@Ogre_BGRまだわかりません。多分それが役に立つかもしれないときのサンプルコードを示すことができますか?
Android開発者

2
@androiddeveloper「通常の」アプリ開発で使うのはメンテではないと思います。プロセス間で情報を受け渡すためにネイティブメソッドでのみ使用されるようです。見てくださいInputChannel.java(クラス説明するコメント)とandroid_os_Parcel.cpp
Ognyan

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.