我不是在问我如何使用它,也不是它做什么,如何工作。当我问到为什么他们只是放putExtra(String,Object)
所以我可以传递一个对象时,问题就出现了。显然他们只是没有忘记这样做,而不是Bundle工作的方式不是你只是那样做的。
PS:Serializable
或Parcelable
是您无法在您创建的每个课程上实施的内容,因此它们不能代替putExtra(String,Object)
答案 0 :(得分:3)
显然他们只是没有忘记这样做
正确。
正如Doctoror Drive所说,Bundle
本身就是Parcelable
。 Parcelable
背后的要点是能够将其放入Parcel
,而Parcel
背后的点是跨越流程边界传递数据。您不能跨进程边界传递任意对象,就像您无法将任意对象写入文件而无法通过套接字传输任意对象一样。
答案 1 :(得分:1)
基本上, parcelable 或可序列化类被转换为"在包含引用的通用二进制文件中。这使您能够通过数据库Intents
等传输和保留数据。
这背后的想法是保留一些Activity
或Fragment
的状态,例如作为状态机。
默认情况下,系统使用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.html和http://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
。我认为Bundles
由HashMaps
支持,因为它们具有关键的,有价值的性质。
显然他们只是没有忘记这样做,而不是Bundle的方式 作品不是你可以做到的。
你是对的。他们没有忘记它。 Bundles
可用于执行IPC(进程间通信),因此系统需要知道如何重新创建Object
,因此Bundle
实现Parcelable
。这使你局限于相同的范例。如果您有自定义Object
,则必须能够告诉Android如何跨进程重新构建自己;因此需要实施Parcelable
。