5

我想提高我的应用程序的性能。我想到的一件事是用 parcelable 替换所有可序列化的意图包参数。

我找到了这个线程:Benefit of using Parcelable instead of serializing object

有人从书中说,parcelable 仅用于进程间通信?那可能已经不是最新的了,对吧?因为它至少在技术上是可能的。

还有一种说法是 parcelable 不可靠,因为实现在不同设备上有所不同,这当然是一个致命的特性,因为我希望它始终工作,所有设备和 api,从 API 7 开始。

而且我还阅读了一些关于使用 Externalizable 或实现自定义协议的建议......但我不明白,为什么 Parcelable 不可靠,为什么 Android 开发人员会围绕一些不适用于所有设备的东西做这样的嗡嗡声?还是评论不正确?

是否值得实施 Parcelable?我坚持使用可序列化吗?还是自定义序列化/可外部化是正确的方法?

请不要告诉我“只是尝试”,我没有时间,专门检查 Parcelable 是否可靠(也没有足够的设备)...询问经验...

谢谢。

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

4

2 回答 2

6

Parcelable始终在所有设备上始终有效。如果没有,什么都行不通。Android 内部非常依赖Parcelable.

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

如果您认为自己遇到了性能问题,那么我会花费我的空闲时间来分析应用程序并收集有关它花费时间的经验数据。恕我直言,替换SerializableParcelable是一种相对较低级别的实现优化,可能会给您带来接近于零的可感知性能改进。

于 2012-08-16T19:41:57.277 回答
4

有人从书中说,parcelable 仅用于进程间通信?那可能已经不是最新的了,对吧?因为它至少在技术上是可能的。

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

还有一种说法是 parcelable 不可靠,因为实现在不同设备上有所不同,这当然是一个致命的特性,因为我希望它始终工作,所有设备和 api,从 API 7 开始。

让我引用包裹文档:

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

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

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

于 2012-08-16T19:48:29.377 回答