我想提高应用的效果。我想到的一件事是用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(或其他东西)一起使用,如果这样可以改善用户体验。
答案 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传输序列化机制。但是,为了实际看到改进,它应该取决于你使用它的程度。