2016-09-15 21 views
4

經過一段時間在我的Java(Android)類中使用實現Serializable後,我發現了Parcelable,但我找不到什麼時候選擇其中的一個。 他們之間的性能差異是什麼?何時以及如何實施Parcelable Vs.序列化?

+0

對於Parcellable檢查此鏈接。 : - http://stackoverflow.com/a/7181792/2362301 對於seriallizable結帳此鏈接: - http://www.coderzheaven.com/2012/07/25/serialization-android-simple-example/ – AmmY

+2

Did你甚至*嘗試*谷歌['Parcelable VS. Serializable'(https://www.google.com/search?q=Parcelable+Vs.+Serializable)? – Andreas

回答

9

它們之間的性能差異是什麼?

Parcelable是signficantly速度比是Serializable爲在您使用Parcelable的地方:Intent演員,保存實例狀態Bundle

話雖這麼說,假設你沒有做很多這方面的東西,特別是在緊張的環路中,用戶不太可能真正注意到這種差異。

時,選擇一種或另

如果你正在做Android開發,寧願ParcelableSerializable其中Parcelable是一個選項。對於數據持久性,最多使用Serializable,儘管我會推薦其他序列化選項(例如,通過Gson的JSON)。

對此的一個主要例外是,如果您的Java對象位於可從Android和其他Java環境中使用的獨立庫中。這些環境不會有Parcelable,但Serializable可以在兩個地方使用。

2

Parcelable協助在Android組件之間傳遞數據。捆綁者將包裹發送,發送和接收,然後在另一側解組,以重新構建原始包裹的副本。

w.r.t Serializable你只需要在一個類及其子類上實現Serializable接口。它是一個標記接口,意味着沒有實現的方法,Java將盡其最大努力有效地對其進行序列化。它使用Reflection來創建大量臨時對象並導致相當多的垃圾收集。

每個谷歌工程師Parcelable比Serializable快10倍以上。在Parcelable中,開發人員編寫自定義代碼進行封送和反編組,因此與序列化相比,它創建的垃圾對象更少。

您可以在此查看示例代碼來了解實現difference- Android: Difference between Parcelable and Serializable?

小心?

  • 密切注意的是,你寫和讀你 值,並從Android使用閱讀 的包裹是盲目的Parcel.The機制的順序和完全信任你獲得訂單 正確,否則你會遇到運行時崩潰。
  • 有沒有 簡單的方法來寫一個布爾到一個包裹。爲此,您可以用out.writeByte((byte) (myBoolean?1:0))替代 寫入一個相應值的字節;並用myBoolean = in.readByte()類似地檢索它!= 0;

檢查以下項目以避免手動編寫Parcelable。

0

Parcelable的Android更好: 1,它的速度更快 2.不使用反射(序列化使用反射)

相關問題