在Android中使用Serializable是不好的?
我一直在阅读大量的post和文章,颂扬可串行化的速度。 我一直在使用两者之间的活动通过意图之间传递数据,还没有注意到两者之间切换时的速度差异。 我必须传输的典型数据量是5到15个嵌套对象,每个对象有2到5个字段。
由于我有大约30个类必须是可转移的,所以实现Parcelable需要大量的样板代码,这增加了维护时间。 我目前的要求之一是编译的代码应该尽可能小, 我希望能够通过使用Serializable over Parcelable来节省一些空间。
我应该使用Parcelable还是没有理由通过Serializable来使用这样的less量数据? 还是有另一个原因,我不应该使用Serializable?
对于内存使用,Parcelable远远好于Serializable。 我强烈build议不要使用Serializable。
你不能使用Parcelable来存储将被存储在磁盘上的数据(因为当事情发生变化时,它不能很好地保证数据的一致性),但是Serializable速度足够慢,所以我强烈build议不要在那里使用它。 你最好自己写数据。
此外,Serializable的性能问题之一是它结束旋转大量的临时对象,导致您的应用程序中的GC活动很多。 这很可恶。 :}
继续使用序列化。 你会看到许多网上的人谁会告诉你,序列化是非常缓慢和低效率。 那是对的。 但是,作为一名电脑程序员,你永远不想做的一件事就是对性能做出任何评论。
问问你自己,如果序列化正在放慢你的程序。 你注意到什么时候从活动到活动? 你注意到它什么时候保存/加载? 如果不是,那很好。 当你使用大量的手动序列化代码时,你不会占用更小的空间,所以在这里没有任何优势。 那么如果100次慢100倍而不是0.1ms,那么如果是100次慢呢? 你也不会看到,所以谁在乎呢? 而且,为什么会有人投入大量的精力来编写30个class级的手动序列化,当它不会有任何明显的性能差异?
大家只是盲目地指出,Parcelable比Serializable更好,更快,但是没有人会用任何certificate去支持他的陈述。 我决定自己testing一下,结果非常有趣。
普通Android设备上的平常Java序列化(如果正确的话)比Parcelable的写入速度快3.6倍,读取速度快1.6倍。
你可以在这里检查我的testing项目: https : //bitbucket.org/afrishman/androidserializationtest
有没有人考虑使用JSON序列化并将数据作为string传递? GSON和Jackson应该足够高效,成为Parcelable和Serializable的竞争对手。