Parcelable где / когда используется descriptionContents ()? - PullRequest
90 голосов
/ 02 ноября 2010

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

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

Его необходимо переопределить.Но стоит ли мне заняться чем-нибудь полезным?

Ответы [ 2 ]

176 голосов
/ 06 февраля 2011

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

Описание для CONTENTS_FILE_DESCRIPTOR в API ref - это:

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

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

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

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

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

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

4 голосов
/ 31 августа 2017

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

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

...