Có ai biết nơi / khi phương thức này của một Parcelable được gọi không?
@Override
public int describeContents() {
return 0;
}
Nó phải được ghi đè. Nhưng tôi có nên cân nhắc làm điều gì đó hữu ích với nó không?
Câu trả lời:
Có một hằng số được định nghĩa trong Parcelable
được gọi là hằng số CONTENTS_FILE_DESCRIPTOR
được sử dụng describeContents()
để tạo giá trị trả về mặt nạ bit.
Mô tả CONTENTS_FILE_DESCRIPTOR
trong tham chiếu API là:
Mặt nạ bit để sử dụng với descriptionContents (): mỗi bit đại diện cho một loại đối tượng được coi là có ý nghĩa đặc biệt tiềm năng khi được sắp xếp.
Mà thực sự có nghĩa là: Nếu bạn cần phải đặt FileDescriptor
đối tượng vào Parcelable bạn nên / phải xác định CONTENTS_FILE_DESCRIPTOR
như giá trị trả về của describeContents (), tức là bằng cách " đối tượng đặc biệt " (trong describeContents()
's mô tả) họ thực sự có nghĩa là: FileDescriptor
.
Toàn bộ chức năng Parcelable này có vẻ chưa hoàn thành (đọc: có thiết kế xấu). Có một điều kỳ lạ khác trong tài liệu:
Các lớp triển khai giao diện Parcelable cũng phải có một trường tĩnh được gọi là CREATOR, là một đối tượng triển khai giao diện Parcelable.Creator
Thực hiện đa kế thừa theo quy tắc được xác định ở dạng con người có thể đọc được? :-)
Có vẻ như lập trình viên C ++ đã thiết kế Parceable
và tại một thời điểm nào đó anh ta nhận ra: Ồ, chết tiệt, không có đa kế thừa trong Java ... :-)
describeContents()
sẽ trả về 0 bất cứ khi nào nó "không có gì đặc biệt về nó" . Mà không thực sự giải thích bất cứ điều gì. Lời giải thích của bạn rõ ràng hơn rất nhiều!
Chỉ có hai giá trị có thể có, 0 hoặc CONTENTS_FILE_DESCRIPTOR
nếu bạn đang tuần tự hóa POLO, giá trị này phải luôn là 0, CONTENTS_FILE_DESCRIPTOR được dành riêng cho ParcelFileDescriptor , có thể tuần tự hóa Trình mô tả tệp (FD) trong hệ thống * unix.