考虑 Android 架构并考虑 Android 的操作设计,包括意图、视图、活动、内容提供程序等,有人可以向我解释一下什么样的“东西”是可包裹的或捆绑的?写在 Android 网站上的解释对我来说听起来有点太蹩脚了,我的意思是读这个“一个特殊的类型安全容器,称为 Bundle,可用于异构值的键/值映射。” 我对捆绑包一无所知,对我来说,它们可以是 XML 文件、哈希映射以及“键/值映射”的所有其他变体。
什么是 Parcelable 或 Bundle,它们的设计和用途是什么?
谢谢。
考虑 Android 架构并考虑 Android 的操作设计,包括意图、视图、活动、内容提供程序等,有人可以向我解释一下什么样的“东西”是可包裹的或捆绑的?写在 Android 网站上的解释对我来说听起来有点太蹩脚了,我的意思是读这个“一个特殊的类型安全容器,称为 Bundle,可用于异构值的键/值映射。” 我对捆绑包一无所知,对我来说,它们可以是 XML 文件、哈希映射以及“键/值映射”的所有其他变体。
什么是 Parcelable 或 Bundle,它们的设计和用途是什么?
谢谢。
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
Android 定义了一种新的轻量级 IPC(进程间通信)数据结构,称为 Parcel,您可以在其中将对象扁平化为字节流,与 J2SDK 的序列化概念相同。
Android Parcel 的简短定义是用于轻量级、高性能进程间通信 (IPC) 的消息容器。在 Android 上,“进程”是标准的 Linux 进程,一个进程无法正常访问另一个进程的内存,因此使用 Parcels,Android 系统将对象分解为可以跨进程边界进行编组/解组的基元。
但是 Parcels 也可以在同一个进程中使用,在同一个应用程序的不同组件之间传递数据。例如,一个典型的 Android 应用程序有多个屏幕,称为“活动”,并且需要将数据或操作从一个活动传递到下一个活动。要编写一个可以传递的对象,我们可以实现 Parcelable 接口。Android 本身提供了一个名为 Intent 的内置 Parcelable 对象,用于将信息从一个组件传递到另一个组件
Bundle是android在android组件之间传递信息的方式。正如您所说,它是一本字典,我们可以在其中放置键值对。任何可以打包的东西都应该是原始的或包裹的。
一个Bundle实现Parcelable。bundle 实例用于存储名称/值对,其中名称是字符串,值是实现 Parcelable 的类。实现 Parcelable 的类可以转换为Parcel,它可以通过用于 IPC的IBinder进行序列化。
最常见的用途是在活动和服务之间传递值(Intent extras)