java - 使用 Parcelable 有什么优点?

标签 java android

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

当我们评估一个 Parcel 时,我们必须创建该类的一个对象。 阅读时也是如此。

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

最佳答案

虽然让自定义类实现 Parcelable 需要花费一些精力,但返回是可以轻松地将它们作为额外内容传递到 BundleBundle 是一个数据容器,用于 Android 世界中各个组件之间的通信,另请参阅 Parcelables and Bundles 上的本指南.

考虑一下您想要将自定义类的实例从 Activity 传递到 Fragment 的情况。 Fragment 有一个参数 Bundle,通常用于初始化Fragment。 (我想是因为,如果用户离开应用程序,并且整个应用程序在一小时后停止并从返回堆栈恢复,则仍然可以访问 Bundle 。另一方面,通过如果 Fragment 没有将它们保存在 onSaveInstanceState() 中的另一个 Bundle 中,构造函数将会丢失)

因此,如果可以将值存储在 Bundle 中,那就太好了。属于实现 Parcelable 的类的对象以及原始数据类型、一些数组、列表和可序列化对象都属于这种类型。

如果无需进行类转换即可检索值,那就更方便了,这就是为什么我尽可能选择 Parcelable 而不是 Serialized:

假设我们有两个类,分别实现了SerializedParcelable。 假设我们有一个 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/

相关文章:

javascript - 成功 import-jdl 后,JHipster 实体菜单为空

java - 使用领域驱动设计建模多对多关系

android - 如何为视障人士编写 Android 代码?

java - 通过 JNI (Android NDK) 将对象 (DisplayMetrics) 从 C 传递到 Java

php - 如何使用 SAX 解析器解析小部分数据?

java - 正则表达式 - 匹配一个单词

Java小程序: Caller-Allowable-Codebase does not work

java - 从同一类创建对象时会保存哪些值

java - 无法在java服务器和android客户端之间建立连接

android - 如何显示只有月份和年份字段的 android 日期选择器?