使用包裹包裹有什么好处?

时间:2020-01-30 19:41:01

标签: java android

我们引用不使用可打包的类对象有什么不同吗?

当我们估价包裹时,我们必须制造该类别的对象。 阅读时也是如此。

如果我们在读写时实际上是在引用一个类对象,那么与使用Parcelable该类有什么区别?

1 个答案:

答案 0 :(得分:2)

尽管花一点精力来制作自定义类实现Parcelable,但好处是可以轻松地将它们作为附加内容传递给BundleBundle是一个数据容器,用于在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