是否可以实现在活动之间传递数据?

时间:2012-08-16 19:18:23

标签: android performance serialization parcelable

我想提高应用的效果。我想到的一件事是用parcelable替换所有可序列化的intent-bundle参数。

我找到了这个帖子:Benefit of using Parcelable instead of serializing object

有人说,从一本书来看,parcelable只是用于进程间通信吗?这可能不是最新的了,对吧?因为从技术上讲,它至少是可能的。

然后还有一个声明,即parcelable不可靠,因为实现因设备而异,这当然是一种杀戮特性,因为我希望它始终工作,所有设备和apis,从API 7开始。

我还阅读了有关使用Externalizable或实现自定义协议的一些建议......但我不明白,为什么Parcelable不可靠,为什么Android开发人员会对所有设备无法解决的问题进行嗡嗡声?或者评论不正确?

是否值得实施Parcelable?我坚持使用Serializable吗?或者是自定义序列化/ Externalizable正确的方法吗?

请不要告诉我“只是试试”,我没有时间,特别是检查Parcelable是否可靠(也没有足够的设备)...经验被要求......

感谢。

P.S。也不要说我“Serializable对于大多数情况都是可以接受的”我知道,它确实可以接受,但我有时间并且想要将它与Parcelable(或其他东西)一起使用,如果这样可以改善用户体验。

2 个答案:

答案 0 :(得分:5)

Parcelable始终在所有设备上运行。如果没有,没有会起作用。 Android内部人员非常依赖Parcelable

Parcelable会比Serializable更有效率,但我严重怀疑它会对您的“用户体验”产生太大影响(当然,除非您在整个地方使用它并序列化非常大而复杂的对象。)

如果您认为自己遇到了性能问题,那么我会花时间分析应用程序并收集有关其花费时间的经验数据。恕我直言将Serializable替换为Parcelable是一种相对较低级别的实施优化,可能会使您的性能提升几乎为零。

答案 1 :(得分:4)

  

有人说,从一本书来看,parcelable只是用于进程间通信吗?这可能不是最新的了,对吧?因为从技术上讲,它至少是可能的。

如果Parcelable不打算在活动之间传递,为什么自API级别1以来putExtra (String name, Parcelable value) Intent方法存在?

  

然后还有一个声明,即parcelable不可靠,因为实现因设备而异,这当然是一种杀戮特性,因为我希望它始终工作,所有设备和apis,从API 7开始。

让我引用Parcel文档:

  

Parcel不是通用序列化机制。此类(以及用于将任意对象放入包中的相应Parcelable API)设计为高性能IPC传输。因此,将任何Parcel数据放入持久存储是不合适的:Parcel中任何数据的基础实现中的更改都可能导致旧数据无法读取。

在这里,我只能阅读有关不将Parcel数据存储到持久存储中的建议。 根据我的个人经验,Parcelable从来不是在活动之间传递数据的问题。我大量使用它并支持API 8到当前的API。

关于性能和速度,确定使用Parcelable更好,因为它是Android特定的高性能IPC传输序列化机制。但是,为了实际看到改进,它应该取决于你使用它的程度。