2010-08-31 63 views
50

我一直在阅读大量的帖子和文章,赞叹可串行化的速度。我一直在使用这两种方法来通过意图在活动之间传递数据,并且在两者之间切换时还没有注意到任何速度差异。我必须传输的典型数据量是5到15个嵌套对象,每个对象具有2到5个字段。在Android中使用Serializable不好?

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

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

+0

您是否在低功耗设备上测试了速度差异?速度差异是真实的。 – 2010-08-31 18:25:55

回答

59

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

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

此外,Serializable的性能问题之一是它结束旋转大量临时对象,从而导致应用程序中出现大量GC活动。这很可恶。 :}

+0

你是对的。但是,您可以始终通过将其转换为JSON字符串来坚持它。 – johan 2011-10-18 20:53:52

+0

如果您要将*包裹*保存为JSON字符串...否,否则不能。将其重新编码为JSON字符串不会改变其中的数据不能保证数据与事物发生更改的一致性,或者保证跨平台版本的格式相同。 – hackbod 2011-10-19 01:40:22

+0

不要坚持包裹。但是你可以坚持这个对象。 – johan 2011-10-19 06:43:57

50

继续使用序列化。你会看到很多在线的人,他们会告诉你序列化非常慢并且效率低下。那是对的。但是,作为计算机程序员你永远不想做的一件事就是对性能作出绝对的评论。

问问自己序列化是否会减慢你的程序。你注意到它从活动到活动的时间?你注意到它何时保存/加载?如果不是,那很好。当你使用大量的手动序列化代码时,你不会占用更小的空间,所以这里没有优势。那么如果100次慢100倍,那么如果它比另一个慢100倍,那么如果10ms而不是0.1ms呢?你不会看到,所以谁在乎?而且,为什么会有人投入大量精力为30个班级编写手动序列化,因为它不会在性能上产生任何明显的差异?

+2

更妙的是,根据我的观察,通常的Java序列化(如果完成的话)比Parcelable快得多。请在下面的答案中查看详情。 – nucleo 2015-03-29 16:10:33

16

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

平均Android设备上的常用Java序列化(如果正确)比写入的Parcelable快3.6倍,读取速度快1.6倍。

您可以检查我的测试项目位置:https://bitbucket.org/afrishman/androidserializationtest

+1

http://www.developerphil.com/parcelable-vs-serializable/ – damson 2015-04-07 13:18:05

+2

@damson这就是为什么我称之为“序列化完成正确”。在上面的文章中,大家都提到,序列化没有充分发挥其潜力。这是不公平的比较。在我的基准测试中,我试图让它更公平,结果完全不同。问题是每个人都“忘记”关于writeObject()/ readObject()方法,这些方法允许让Java内置序列化闪电般快速,而不会像Parcelable这样的特定于平台的事物。 – nucleo 2015-04-07 13:39:42

+3

我完全同意。实际上,我觉得,有两个有用和安静的等价物,但取决于您的应用场景。 这里的另一篇文章将ligth这次放在Serializable上 http://nemanjakovacevic.net/blog/english/2015/03/24/yet-another-post-on-serializable-vs-parcelable/ – damson 2015-04-08 12:45:30

0

有没有人使用JSON和传递数据作为一个字符串视为序列化? GSON和Jackson应该足够高效,成为Parcelable和Serializable的竞争对手。

相关问题