语境:
Android的
我读了很多的例子在网络上传递活动之间的DATAS。
我学到的是 :
- 通过意图通过原始DATAS(intent.putExtra(键,值))
- 捆绑原始DATAS并把它放在一个intent.putExtra(密钥,包对象)
- Parcelables并 - >复杂的对象和原语。
之前你说,是的,我的确错过了一些东西。
题:
那么,它似乎有多种方式来达到同样的目的。
如果我想通过一个自定义的对象,Parcelable是我的男人。 但我仍然会为“序列化”,所以到了最后,我也会有原语,对吗?
要通过原语,我为什么要使用一个包时,直接在意图通过将它吗?
Android的文档/论坛/博客的例子没有做对我来说。 我的C背景仍持有我回了一下。
为什么有3点不同的方式来实现一个目标,顺便说一下?
但我仍然会为“序列化”,所以到了最后,我也会有原语,对吗?
在Java中几乎一切最终归结为基元。
要通过原语,我为什么要使用一个包时,直接在意图通过将它吗?
无论哪种方式工作。 使用哪种让你感觉更舒服。 然而,只要留意上的按键冲突(例如,您的活动,那你继承你的,都试图把同样的事情在同一密钥的一些基本的活动Intent
或Bundle
)。
为什么有3点不同的方式来实现一个目标,顺便说一下?
我要去猜测,“一个目标”就是“从一个活动传递到另一个数据”。 涉及的进程间通信(IPC),即使这两种活动都在相同的过程中,作为核心OS过程参与路由。 对于从流以外几乎所有ContentProvider
在标准的Android,IPC意味着数据必须被放入Parcel
,其被转换成字节数组用于使跨进程边界。
Parcelable
表示可以添加到自定义类,让他们投入的适配Parcel
。
Bundle
是实现一个具体的类Parcelable
和代表HashMap
状结构,但强类型到已知能够进入一个东西Parcel
。 Bundle
比一个更方便的Parcel
对于开发商来说,因为它提供了通过钥匙随机访问,其中Parcel
没有。
Intent
演员仅仅是一个Bundle
,为此, Intent
暴露自己的访问方法。
我所有的情况下,我应该忘记其他可能性,并且只使用Parcelable?
据我所知,有什么EpicPandaForce指的是之间的比较Serializable
和Parcelable
。 要么可以进入一个Bundle
或Parcel
。 在这两者中,所有其他条件相同, Serializable
是比较慢的,因为它假定序列化形式必须是坚固耐用,能够数月或数年后再次读入。 Parcelable
假定每个人都工作过相同的类定义的,可以绕过一些Serializable
开销,作为一个结果。
话虽这么说,这是一个微型优化。
为什么其他的还在那里呢?
不是什么都可以制成延伸Parcelable
,尤其是java.*
类。 Integer
,例如,是不是Parcelable
。 然而,我们希望能够通过int
和Integer
数值周围。 因此, Parcel
支持int
一样, Bundle
。
你的意思是我应该拿回来与R.blah事
据我所知,在该意见,Marconcini先生指的是“ID”作为一个笼统的概念,不是指R.id
值明确。 例如,如果你在保持图像的缓存,而不是绕过实际的Bitmap
对象,通过周围的一些标识,它指向缓存。
如果你传递的对象与非serializables建议使用Parcelable。 这意味着您可以实现对象的序列化表示自己以确保数据是你所期望的传递回和活动之间转发。
如果你传递一个简单的ID或串向后和向前通过各种手段使用intent.putExtra()
我发现这篇文章的题目是非常有用的,以帮助了解这些选项之间的差异和优势: http://www.developerphil.com/parcelable-vs-serializable/