Parcelable где / когда используется describeContents ()?


кто-нибудь знает, где/когда этот метод Parcelable называется?

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

Он должен быть overriden. Но я должен рассмотреть возможность сделать что-то полезное с этим?

2 83

2 ответа:

есть константа, определенная в Parcelable под названием CONTENTS_FILE_DESCRIPTOR, который предназначен для использования в describeContents() для создания возвращаемого значения битовой маски.

описание CONTENTS_FILE_DESCRIPTOR на API ref - это:

битовые маски для использования с describeContents (): каждый бит представляет собой вид объекта, который, как считается, имеет потенциальное особое значение при сортировке.

что на самом деле означает: Если вам нужно поставить FileDescriptor объект в Parcelable вас должен / должен указать CONTENTS_FILE_DESCRIPTOR как возвращаемое значение describeContents (), т. е. по "особый объект "(in describeContents()'s описание) они реально означают: FileDescriptor.

все это Parcelable функциональность выглядит незавершенной (читай: имеет плохой дизайн). Есть еще одна странная вещь в документы:

классы, реализующие интерфейс Parcelable, также должны иметь статическое поле CREATOR, которое является объектом, реализующим Parcelable.Интерфейс создателя

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

похоже, что программист C++ разработан Parceable и в какой-то момент он понял: черт, нет множественного наследования в Java... : -)

есть только два возможных значения, 0 или CONTENTS_FILE_DESCRIPTOR

Если вы сериализуете POLO, это значение всегда должно быть 0, в CONTENTS_FILE_DESCRIPTOR восстанавливается за ParcelFileDescriptor, который может сериализовать файловый дескриптор (FD) в системе *unix.