java - 使用 Parcelable 有什么好处?
问题描述
我们引用一个不使用 parcelable 的类对象有什么不同吗?
当我们对 Parcel 赋值时,我们必须创建该类的对象。阅读时也是如此。
如果我们在读写时实际上是在引用一个类对象,那么它与使用 Parcelable 那个类有什么区别呢?
解决方案
虽然实现自定义类需要一点努力Parcelable
,但回报是可以轻松地将它们作为附加项传递给Bundle
. ABundle
是一个数据容器,用于在 Android 世界中的各种组件之间进行通信,另请参阅Parcelables 和 Bundles指南。
考虑您希望将自定义类的实例从 a 传递Activity
到 a 的情况Fragment
。AFragment
有一个参数 Bundle
,通常用于初始化Fragment
. (我想是因为Bundle
如果用户离开应用程序并且整个应用程序停止并在一小时后从后台堆栈恢复,则仍然可以访问。另一方面,如果Fragment
没有,任何通过构造函数传入的值都将丢失不要将它们保存在另一个Bundle
中onSaveInstanceState()
)
因此,如果可以将值存储在Bundle
. 属于实现类Parcelable
的对象与原始数据类型、一些数组、列表和可序列化对象一起属于这种类型。
如果无需进行类强制转换就可以检索值,那就更方便了,这就是为什么我Parcelable
尽可能Serializable
喜欢:
假设我们有两个Serializable
分别实现的类Parcelable
。假设我们有一个Bundle b = getArguments();
要检索Serializable
值,您需要以下语句
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");
推荐阅读
- android - 在没有后台位置权限的情况下检测 Android AppWidget 的位置
- android - ExoPlayer如何在加载视频期间显示加载第一帧
- css - 光滑的滑块箭头在 ios (iphone 8) 中被剪切,但在 chrome 和 firefox 中模拟时看起来不错
- windows - 在关闭期间保持进程处于活动状态
- vue.js - 如何在 Nuxt 存储突变中使用 $set?
- android - 元素未添加到 Recycleview
- elasticsearch - 缓冲区刷新比 slow_flush_log_threshold 花费的时间更长
- c++ - F找到具有最小绝对差的第二个数组
- java - 如何删除arraylist中包含数字和其他元素的项目
- powershell - PowerShell 访问被拒绝删除文件/文件夹