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

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

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

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

2 ответов


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

описание CONTENTS_FILE_DESCRIPTOR на API-интерфейс Реф - это:

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

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

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

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

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

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


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

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