Можна переглядати, де / коли використовується descriContents ()?


93

Хтось знає, де / коли називається цей метод Парцеляції ?

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

Це має бути замінено. Але чи варто мені розглядати щось корисне з цим?


Здається, ніхто не має ідеї ..? : - /
cody

Відповіді:


181

Існує константа, визначена у Parcelableвикликається, CONTENTS_FILE_DESCRIPTORяка призначена для використання у describeContents()створенні поверненого значення бітової маски.

Опис для посиланняCONTENTS_FILE_DESCRIPTOR на API :

Бітові маски для використання з descriContents (): кожен біт представляє свого роду об'єкт, який, як вважається, має потенційне особливе значення при маршалінгу.

Що на насправді означає: Якщо вам потрібно помістити FileDescriptorоб'єкт в Parcelable ви повинні / необхідно вказати в CONTENTS_FILE_DESCRIPTORякості значення, що повертається describeContents (), тобто по « спеціальному об'єкту » (в describeContents()описі iS) вони на самому ділі означають: FileDescriptor.

Ця вся функціональність, що піддається парцеляції, виглядає незавершеною (читайте: має поганий дизайн). У документах є ще одна дивна річ:

Класи, що реалізують інтерфейс Parcelable, також повинні мати статичне поле під назвою CREATOR, яке є об'єктом, що реалізує Parcelable.Creator інтерфейс

Реалізація множинного успадкування за правилами, визначеними у зручній для читання формі? :-)

Здається, програміст на C ++ розробив Parceableі в якийсь момент він зрозумів: О, блін, у Java немає багаторазового успадкування ... :-)


2
Дякую за це детальне пояснення. Я знайшов вашу відповідь після розчарування цим підручником, який стверджував, що describeContents()повинен повертати 0, коли він "не має нічого особливого в цьому" . Що насправді нічого не пояснює. Ваше пояснення набагато чіткіше!
WebViewer

1
@LeoLink android.os.ParcelFileDescriptor
Огнян

7
Справа не в багаторазовому успадкуванні. Ви не можете визначити статичний метод в інтерфейсі Java, а не у версії, яка використовується в Android, отже, це поле CREATOR.
Алекс Н.

1
@Ogre_BGR Я все ще не розумію. Може, ви можете показати приклад коду, коли це може бути корисним?
розробник android

2
@androiddeveloper Я думаю, що це не слід використовувати для "звичайної" розробки додатків. Здається, він використовується лише власними методами для передачі інформації між процесами. Будь ласка , зверніть увагу на InputChannel.java (клас , що описує коментарю) і android_os_Parcel.cpp
Ognyan

7

Існує лише два можливих значення: 0 або CONTENTS_FILE_DESCRIPTOR

якщо ви серіалізуєте POLO, це значення завжди має бути 0, CONTENTS_FILE_DESCRIPTOR зарезервовано для ParcelFileDescriptor , який може серіалізувати дескриптор файлів (FD) у системі * unix.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.