在Android中使用Serializable是不是很糟糕?

时间:2010-08-31 18:01:37

标签: android serializable parcelable

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

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

我应该使用Parcelable还是没有理由在Serializable上使用它来处理这么少量的数据?或者是否有其他原因我不应该使用Serializable?

4 个答案:

答案 0 :(得分:64)

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

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

此外,Serializable的一个性能问题是它结束了旋转大量临时对象,导致应用程序中出现大量GC活动。这太令人发指了。 :}

答案 1 :(得分:52)

继续使用序列化。你会看到许多在线人员会告诉你序列化是非常缓慢和低效的。那是正确的。但是,作为一名计算机程序员,你永远不想做的一件事是对性能作出绝对的评论。

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

答案 2 :(得分:15)

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

  

普通Android设备上的普通Java序列化(如果做得好)比写入Parcelable快3.6倍,读取速度快1.6倍。

您可以在此处查看我的测试项目:https://bitbucket.org/afrishman/androidserializationtest

答案 3 :(得分:0)

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

相关问题