gpt4 book ai didi

java - 使用 Parcelable 有什么优点?

转载 作者:行者123 更新时间:2023-11-30 01:40:59 26 4
gpt4 key购买 nike

我们引用不使用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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com