bundle如何工作



我不是在问我如何使用它,也不是它做什么,它是如何工作的。当我为什么他们不放一个putExtra(String,Object)这样我就可以传递一个对象时,我就想到了这个问题。显然,他们只是没有忘记这样做,而不是 Bundle 的工作方式不是您可以这样做的。

PS:SerializableParcelable是您无法在创建的每个类上实现的,因此它们不能替代putExtra(String,Object)

显然他们只是没有忘记这样做

正确。

Bundle本身是Parcelable的,正如多克托·道所指出的。Parcelable背后的要点是能够将其放入Parcel,而Parcel背后的要点是跨进程边界传递数据。不能跨进程边界传递任意对象,就像不能将任意对象写入文件,也不能通过套接字流式传输任意对象一样。

基本上,可包裹可序列化的类在通用二进制文件中使用包引用进行"转换"。这使您能够通过数据库、Intents等传输和持久化数据。

这背后的想法是将某些ActivityFragment的状态保留为状态机。

默认情况下,系统使用 Bundle 实例状态来保存 有关活动布局中每个 View 对象的信息(例如 输入到编辑文本对象中的文本值(。所以,如果你的活动 实例被销毁并重新创建,布局的状态为 还原到以前的状态,无需任何代码。然而 您的活动可能包含更多您想要的状态信息 还原,例如跟踪用户进度的成员变量 活动。

有关详细信息,请参阅重新创建活动。

序列 化

默认情况下,序列化机制对对象的类进行编码 名称,其非瞬态字段的名称(包括非公共字段 字段(,以及所有这些字段的值。输出是一个 不透明的字节序列。这些字节可以解码为新的, 等效实例,只要解码器具有兼容的 原始类。更改类名、字段名称或字段 类型破坏序列化兼容性并使序列化复杂化 可序列化的旧版本和新版本之间的互操作性 .class。添加或删除字段也会使序列化复杂化 在类的版本之间,因为它需要您的代码来应对 缺少字段。

阅读更多: http://developer.android.com/reference/java/io/Serializable.html

包裹

包裹 API 的大部分内容都围绕着读取和写入 各种类型

阅读更多:http://developer.android.com/reference/android/os/Parcel.html 和 http://developer.android.com/reference/android/os/Parcelable.html

捆绑包文档:http://developer.android.com/reference/android/os/Bundle.html

更多链接和帖子

  • http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/
  • http://www.developerphil.com/parcelable-vs-serializable/
  • 使用可包裹对象而不是序列化对象的好处

希望有所帮助。

Bundle实现Parcelable因此您传递的所有对象都必须对Parcel有效,否则。捆绑包不能用作传递Parcelable

我不是在问我如何使用它,也不是问它做什么,它是如何工作的。

Bundle实现Parcelable,所以它必须Objects传递给Parcel。我认为Bundles是有HashMaps支持的,因为它们的关键,价值性质。

显然他们只是没有忘记这样做,而不是捆绑的方式 作品不是你可以做的。

你是对的。他们没有忘记。 Bundles可以用来做IPC(进程间通信(,所以系统需要知道如何重新创建一个Object,因此Bundle实现Parcelable。这使您仅限于相同的范式。如果你有一个自定义Object它必须能够告诉Android如何跨进程重建自己;因此,它需要实现Parcelable

相关内容

  • 没有找到相关文章

最新更新