2010-08-31 60 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的競爭對手。

相關問題