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】:Parcelable
和 Bundle
是您想要发送的信息包!
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
,如果你想通过bundle
或intent
传递一个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里的AdapterView中OnItemClickListener监听器四个参数的含义