是()使用Parcelable何处/何时describeContents?是()使用Parcelab

2019-05-13 08:18发布

有谁知道在哪里/当Parcelable的调用此方法?

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

它必须重写。 但是,我应该考虑做一些与它有用吗?

Answer 1:

有在规定的恒定Parcelable称为CONTENTS_FILE_DESCRIPTOR这是指在所使用describeContents()来创建位掩码返回值。

为说明CONTENTS_FILE_DESCRIPTOR在API参考是:

与describeContents()使用位掩码:每一位代表的是一种被认为编组时,有潜在的具有特殊意义的对象。

其真正含义是:如果你需要把FileDescriptor对象到Parcelable你应该/必须指定CONTENTS_FILE_DESCRIPTOR为describeContents()的返回值,通过“ 特殊对象 ”,即(在describeContents()的说明),他们真的是: FileDescriptor

这整个Parcelable功能看起来未完成(读:有坏的设计)。 有一个在文档另一个奇怪的事情:

实现Parcelable接口的类也必须有一个名为CREATOR静态字段,这是一个实现了Parcelable.Creator接口的对象

在人类可读的形式来实现所定义的规则由多继承? :-)

这似乎是C ++程序员设计Parceable并在某些时候他才意识到:哦,该死的,有在Java中没有多重继承... :-)



Answer 2:

只有两种可能的数值0或CONTENTS_FILE_DESCRIPTOR

如果你是序列化POLO,这个值应该始终为0,则CONTENTS_FILE_DESCRIPTOR保留给ParcelFileDescriptor ,这可能在序列* UNIX系统中的文件描述符(FD)。



文章来源: Parcelable where/when is describeContents() used?