Is using Serializable in Android bad?
我读过很多文章和文章都赞扬Parcelable优于Serializable的速度。 我已经使用了一段时间,通过Intent在Activity之间传递数据,并且还没有注意到在两者之间切换时的速度差异。 我必须传输的典型数据量是5到15个嵌套对象,每个对象有2到5个字段。
由于我大约有30个必须可转让的类,因此实施Parcelable需要大量样板代码,从而增加了维护时间。 我目前的要求之一是,编译后的代码应尽可能小。 我希望通过在Parcelable上使用Serializable可以节省一些空间。
我应该使用Parcelable还是没有理由通过Serializable对如此少量的数据使用它? 还是有其他原因导致我不应该使用Serializable?
对于内存使用,Parcelable远远好于Serializable。我强烈建议不要使用Serializable。
您不能将Parcelable用于将要存储在磁盘上的数据(因为当事情发生变化时它不能很好地保证数据的一致性),但是Serializable非常慢,因此我强烈建议不要在其中使用它。您最好自己编写数据。
另外,Serializable的性能问题之一是,它最终会旋转许多临时对象,从而在您的应用程序中导致大量GC活动。真是令人发指。 :}
继续使用序列化。您会在网上看到很多人会告诉您序列化非常缓慢且效率低下。那是正确的。但是,作为计算机程序员,您永远不想做的一件事就是对性能进行绝对评价。
问问自己,序列化是否会减慢程序速度。您注意到它从一个活动到另一个活动的时间吗?您注意到它何时保存/加载吗?如果没有,那很好。当您使用大量的手动序列化代码时,将不会占用更小的空间,因此这里没有任何优势。那么,如果比替代方法慢100倍,又慢了100倍,则意味着10毫秒而不是0.1毫秒呢?您也不会看到,所以谁在乎?而且,为什么在性能没有明显变化的情况下,为什么有人会投入大量精力编写30个类的手动序列化?
每个人都只是盲目地指出,Parcelable比Serializable更好,更快,但是没有人试图用任何证据来支持他的陈述。我决定自己进行测试,并得到非常有趣的结果。
Usual Java serialization on an average Android device (if done right) is about 3.6 times faster than Parcelable for writes and about 1.6 times faster for reads.
您可以在这里检查我的测试项目:https://bitbucket.org/afrishman/androidserializationtest
有没有人考虑过使用JSON进行序列化并将数据作为字符串传递? GSON和Jackson的效率应该足以成为Parcelable和Serializable的竞争对手。