5

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

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

谢谢。

4

3 回答 3

10

Parcelable并且Bundle是您想要发送的信息包!

Bundle:如果您想开始新的activity,您可以将Bundle信息与您创建的activity一起发送到: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,如果你想传递一个object(你自己的类) withbundle或 with intent,你应该实现这个interface

class Example implements Parcelable{
      // some information here
}
// You can send with intent or bundle:
b.putParcelable(key, value);
i.putExtra(name, value);

更多关于 google android 的详细信息:Bundle Parcelable

于 2012-08-01T01:30:06.387 回答
4

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

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

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

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

于 2012-08-01T03:43:12.737 回答
3

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

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

于 2012-08-01T01:24:28.010 回答