Исправлено, где/когда используется descriptionContents()?

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

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

Это нужно переоценить. Но стоит ли мне подумать над чем-то полезным?

Ответ 1

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

Описание CONTENTS_FILE_DESCRIPTOR в API ref:

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

Что действительно означает: если вам нужно поместить объект FileDescriptor в Parcelable, вы должны/должны указать CONTENTS_FILE_DESCRIPTOR как возвращаемое значение для описанияContents(), то есть с помощью < специального объекта "(в describeContents() description) они действительно означают: FileDescriptor.

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

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

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

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

Ответ 2

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

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