57

我一直在阅读很多帖子和文章,它们颂扬 Parcelable 优于 Serializable 的速度。我已经使用了一段时间来通过 Intents 在活动之间传递数据,并且在两者之间切换时还没有注意到任何速度差异。我必须传输的典型数据量是 5 到 15 个嵌套对象,每个对象包含 2 到 5 个字段。

由于我有大约 30 个必须可转移的类,因此实现 Parcelable 需要大量样板代码,这会增加维护时间。我目前的要求之一也是编译后的代码应该尽可能小;我希望我可以通过使用 Serializable 而不是 Parcelable 来节省一些空间。

我应该使用 Parcelable 还是没有理由在 Serializable 上使用它来处理如此少量的数据?还是我不应该使用 Serializable 的另一个原因?

4

4 回答 4

69

对于内存使用,Parcelable 比 Serializable 要好得多。我强烈建议不要使用 Serializable。

您不能将 Parcelable 用于将存储在磁盘上的数据(因为当事情发生变化时它不能很好地保证数据的一致性),但是 Serializable 足够慢,我强烈建议不要在那里使用它。你最好自己写数据。

此外,Serializable 的性能问题之一是它最终会遍历大量临时对象,从而在您的应用程序中导致大量 GC 活动。真是太可恶了。:}

于 2010-08-31T19:14:22.343 回答
59

继续使用序列化。您会在网上看到很多人会告诉您,序列化非常缓慢且效率低下。那是对的。但是,作为一名计算机程序员,你永远不想做的一件事是将任何关于性能的评论视为绝对的。

问问自己,序列化是否会减慢您的程序速度。您是否注意到它从一个活动到另一个活动?您是否注意到它何时保存/加载?如果没有,那很好。当您使用大量手动序列化代码时,您不会获得更小的足迹,因此没有任何优势。那么,如果慢 100 倍意味着 10 毫秒而不是 0.1 毫秒,那么如果它比替代方案慢 100 倍呢?你也不会看到,所以谁在乎呢?而且,为什么有人会投入大量精力来为 30 个类编写手动序列化,而它不会对性能产生任何明显的影响?

于 2013-02-02T20:58:50.270 回答
20

每个人都只是盲目地说 Parcelable 比 Serializable 更好更快,但是没有人试图用任何证据来支持他的陈述。我决定自己测试一下,我得到了非常有趣的结果。

普通 Android 设备上的常规 Java 序列化(如果操作正确)在写入方面比 Parcelable 快约 3.6 倍,在读取方面快约 1.6 倍。

你可以在这里查看我的测试项目:https ://github.com/afrish/androidserializationtest

于 2015-03-29T16:08:10.837 回答
1

有没有人考虑过使用 JSON 进行序列化并将数据作为字符串传递?GSON 和 Jackson 的效率应该足以成为 Parcelable 和 Serializable 的竞争对手。

于 2015-06-03T08:24:05.190 回答