Bundle如何运作?

时间:2014-05-30 12:18:15

标签: android android-bundle

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

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

4 个答案:

答案 0 :(得分:3)

  

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

正确。

正如Doctoror Drive所说,Bundle本身就是ParcelableParcelable背后的要点是能够将其放入Parcel,而Parcel背后的点是跨越流程边界传递数据。您不能跨进程边界传递任意对象,就像您无法将任意对象写入文件而无法通过套接字传输任意对象一样。

答案 1 :(得分:1)

基本上, parcelable 可序列化类被转换为"在包含引用的通用二进制文件中。这使您能够通过数据库Intents等传输和保留数据。

这背后的想法是保留一些ActivityFragment的状态,例如作为状态机。

  

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

Recreating an Activity了解详情。

<强> Serializable

  

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

阅读详情:http://developer.android.com/reference/java/io/Serializable.html

<强> Parcel

  

Parcel API的大部分内容围绕读取和写入数据   各种类型

详情请见:http://developer.android.com/reference/android/os/Parcel.htmlhttp://developer.android.com/reference/android/os/Parcelable.html

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

更多链接和帖子

希望有所帮助。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

  

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

Bundle实施Parcelable,因此必须将Objects传递给Parcel。我认为BundlesHashMaps支持,因为它们具有关键的,有价值的性质。

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

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