我们引用不使用parcelable的类对象有什么不同吗?
当我们评估一个 Parcel 时,我们必须创建该类的一个对象。 阅读时也是如此。
如果我们在读写时实际上引用的是一个类对象,那么使用 Parcelable 该类有什么区别?
最佳答案
虽然让自定义类实现 Parcelable
需要花费一些精力,但返回是可以轻松地将它们作为额外内容传递到 Bundle
。 Bundle
是一个数据容器,用于 Android 世界中各个组件之间的通信,另请参阅 Parcelables and Bundles 上的本指南.
考虑一下您想要将自定义类的实例从 Activity
传递到 Fragment
的情况。 Fragment
有一个参数 Bundle
,通常用于初始化Fragment
。 (我想是因为,如果用户离开应用程序,并且整个应用程序在一小时后停止并从返回堆栈恢复,则仍然可以访问 Bundle
。另一方面,通过如果 Fragment
没有将它们保存在 onSaveInstanceState()
中的另一个 Bundle
中,构造函数将会丢失)
因此,如果可以将值存储在 Bundle
中,那就太好了。属于实现 Parcelable
的类的对象以及原始数据类型、一些数组、列表和可序列化对象都属于这种类型。
如果无需进行类转换即可检索值,那就更方便了,这就是为什么我尽可能选择 Parcelable
而不是 Serialized
:
假设我们有两个类,分别实现了Serialized
和Parcelable
。
假设我们有一个 Bundle b = getArguments();
要检索 Serialized
值,您需要以下语句
SomeSerializableClass instanceOfSerializableClass = (SomeSerializableClass)b.getSerializable("keyForSerializableValue");
而对于 Parcelable
值,您可以编写
SomeParcelableClass instanceOfParcelableClass = b.getParcelable("keyForParcelableValue");
在 Kotlin 中,我们有一种罕见的情况,即语句比 Java 对应的语句长:
val instanceOfSerializableClass: SomeSerializableClass? = b.getSerializable("keyForSerializableValue") as SomeSerializableClass
相比
val instanceOfParcelableClass = b.getParcelable<SomeParcelableClass>("keyForParcelableValue");
关于java - 使用 Parcelable 有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993379/