Android 对“所有可打包的数据类型”的含义以及我如何使用这些数据?

Posted

技术标签:

【中文标题】Android 对“所有可打包的数据类型”的含义以及我如何使用这些数据?【英文标题】:What Android mean with "all parcelable data types" and how i can use this data? 【发布时间】:2012-08-01 01:04:22 【问题描述】:

考虑 android 架构并考虑 Android 的操作设计,包括意图、视图、活动、内容提供者等,有人可以向我解释一下什么样的“事物”是 parcelable 或 bundle ?写在 Android 网站上的解释对我来说听起来有点太蹩脚了,我的意思是读这个“一个特殊的类型安全容器,称为 Bundle,可用于异构值的键/值映射。”我对捆绑包一无所知,对我来说,它们可以是 XML 文件、哈希映射以及“键/值映射”的所有其他变体。

什么是 Parcelable 或 Bundle,它们的设计和用途是什么?

谢谢。

【问题讨论】:

【参考方案1】:

ParcelableBundle 是您想要发送的信息包!

Bundle:如果您想开始新的activity,可以将Bundle 的信息连同您创建的new Intent 一起发送到new Intent

// Bundle b is sent with new intent i
Bundle b = new Bundle();
b.putString(key, value);
b.putInt(key, value);
Intent i = new Intent(...);
i.putExtras(b);
startActivity(i);
// In the activity which started from the intent i, you can get the bundle b
this.getIntent().getExtras();

Parcelable 是一个interface,如果你想通过bundleintent 传递一个object(你自己的类),你应该实现这个interface

class Example implements Parcelable
      // some information here

// You can send with intent or bundle:
b.putParcelable(key, value);
i.putExtra(name, value);

更多关于谷歌安卓的细节在这里:BundleParcelable

【讨论】:

您不必实现 Parcelable。你可以只实现 Serializable。 出于性能原因,我们强烈反对使用 Serializable。 Parcelable 的实现要高效得多。 我确信它更高效,但 Parcelable 在许多情况下需要更多的工作来实现,并且在所有情况下都更具体于 android。如果您正在重用数据模型类,比如说服务器端,Serializable 可能更有意义。我也强烈反对使用诸如“必须”之类的绝对语言,因为它根本不正确,而“应该”会更好。【参考方案2】:

Android 定义了一种新的轻量级 IPC(进程间通信)数据结构,称为 Parcel,您可以在其中将对象扁平化为字节流,与 J2SDK 的序列化概念相同。

Android Parcel 的简短定义是用于轻量级、高性能进程间通信 (IPC) 的消息容器。在 Android 上,“进程”是标准的 Linux 进程,一个进程不能正常访问另一个进程的内存,因此使用 Parcels,Android 系统将对象分解为可以跨进程边界编组/解组的基元。

但是 Parcels 也可以在同一个进程中使用,在同一个应用程序的不同组件之间传递数据。例如,一个典型的 Android 应用程序有多个屏幕,称为“活动”,并且需要将数据或操作从一个活动传递到下一个活动。要编写一个可以传递的对象,我们可以实现 Parcelable 接口。 Android 本身提供了一个名为 Intent 的内置 Parcelable 对象,用于将信息从一个组件传递到另一个组件

Bundle是android在android组件之间传递信息的方式。正如您所说,它是一本字典,我们可以在其中放置键值对。任何可以打包的东西都应该是原始的或包裹的。

【讨论】:

【参考方案3】:

Bundle 实现 Parcelable。 bundle 实例用于存储名称/值对,其中名称是字符串,值是实现 Parcelable 的类。实现 Parcelable 的类可以转换为Parcel,可以通过IBinder 进行序列化,用于IPC。

最常见的用途是在活动和服务之间传递值(Intent extras)

【讨论】:

以上是关于Android 对“所有可打包的数据类型”的含义以及我如何使用这些数据?的主要内容,如果未能解决你的问题,请参考以下文章

Android中RelativeLayout各个属性的含义

Android GNSS原始观测值的含义及伪距计算

Android里的AdapterView中OnItemClickListener监听器四个参数的含义

android 中tools:ignore="UselessParent"这个属性的含义

有关遗传算法的疑问:“以一定概率进行交叉和变异”的含义?

android:layout_margin真实含义 及 自己定义复合控件 layout()运行无效的问题解决