我们引用不使用可打包的类对象有什么不同吗?
当我们估价包裹时,我们必须制造该类别的对象。 阅读时也是如此。
如果我们在读写时实际上是在引用一个类对象,那么与使用Parcelable该类有什么区别?
答案 0 :(得分:2)
尽管花一点精力来制作自定义类实现Parcelable
,但好处是可以轻松地将它们作为附加内容传递给Bundle
。 Bundle
是一个数据容器,用于在Android Universe中的各个组件之间进行通信,另请参阅本指南的Parcelables and Bundles。
请考虑您要将自定义类的实例从Activity
传递到Fragment
的情况。 Fragment
具有自变量 Bundle
,该参数通常用于初始化Fragment
。 (我想是因为如果用户离开应用程序而Bundle
仍然可以访问,并且整个应用程序在一小时后停止并从后堆栈中恢复。另一方面,通过构造函数传递的任何值都将如果Fragment
没有将它们保存在Bundle
的另一个onSaveInstanceState()
中,则会丢失)
因此,最好将值存储在Bundle
中。属于实现Parcelable
的类的对象属于这种类型,包括原始数据类型,一些数组,列表和可序列化的对象。
如果无需进行类转换就可以检索值,这将更加方便,这就是为什么我在可能的情况下更喜欢Parcelable
胜过Serializable
:
假设我们有两个分别实现Serializable
的类。
假设我们有一个Parcelable
要检索Bundle b = getArguments();
值,您需要以下语句
Serializable
您可以编写SomeSerializableClass instanceOfSerializableClass = (SomeSerializableClass)b.getSerializable("keyForSerializableValue");
值
Parcelable
在Kotlin中,我们遇到了一种罕见的情况,即该语句比Java语句长:
SomeParcelableClass instanceOfParcelableClass = b.getParcelable("keyForParcelableValue");
相比
val instanceOfSerializableClass: SomeSerializableClass? = b.getSerializable("keyForSerializableValue") as SomeSerializableClass