2016-09-15 2 views
4

Java(Android)のクラスでSerializableの実装を使用してしばらくして、私はParcelableを発見しましたが、どちらかを選択するタイミングを見つけることができませんでした。 また、それらのパフォーマンスの違いは何ですか?Parcelable Vsを実装する時期と方法シリアライズ可能?

+0

(直列化はリフレクションを使用しています)リフレクションを使用していません 2.高速です。 : - http://stackoverflow.com/a/7181792/2362301 Seriallizable checkoutについては、次のリンクを参照してください。 - http://www.coderzheaven.com/2012/07/25/serialization-android-simple-example/ – AmmY

+2

DidあなたもGoogle * ['Parcelable Vs。 Serializable'](https://www.google.com/search?q=Parcelable+Vs.+Serializable)? – Andreas

答えて

9

どのようなパフォーマンスの違いがありますか?

ParcelableあなたはParcelable使用場所のためSerializableであるよりもsignficantly速いです:Intentエキストラを、インスタンス状態Bundleを保存したが、その他

言われていること、あなたはこのようなものをたくさんやっていないと仮定して、特にタイトなループでは、ユーザーはその違いに実際に気付くことはまずありません。

ときは、Androidの開発を行っている場合、1または別の

を選択ParcelableはオプションですSerializableParcelableを好みます。ほとんどの場合、データの永続性にはSerializableを使用しますが、他のシリアル化オプション(Gson経由のJSONなど)を推奨します。

JavaオブジェクトがAndroidと他のJava環境の両方から使用される別個のライブラリにある場合、1つの主な例外があります。これらの環境にはParcelableは含まれませんが、Serializableは両方の場所で動作します。

2

Parcelableは、Androidコンポーネント間でデータをやりとりするのに役立ちます。バインダーは、送信されるべきパーセルをマーシャリングし、それを送受信し、それを反対側でアンマーシャリングして元のパーセルのコピーを再構成する。

w.r.t Serializableは、クラスとその子にSerializableインターフェイスを実装するだけです。それは実装するメソッドがないことを意味するマーカーインターフェイスです。Javaは単に効率的にシリアル化するための最善の努力をします。Reflectionは多くの一時オブジェクトを作成し、ガベージコレクションをかなり引き起こしがちです。

Googleのエンジニアパーセルは、Serializableよりも10倍以上高速です。 Parcelableでは、開発者はマーシャリングとアンマーシャリング用のカスタムコードを記述するので、シリアライゼーションと比較してガベージオブジェクトが少なくなります。あなたは、実装を理解するために、ここでのサンプルコードを確認することができ

Android: Difference between Parcelable and Serializable?

要注意をdifference-?

  • はに細心の注意を払って、あなたが書くとAndroidは小包が盲目で、完全オーダー が正しい取得するためにあなたを信頼 を読み取るために使用するParcel.The機構にしてからご 値を読み取るとするためです、そうしないと、実行時クラッシュが発生します。
  • Parcelにブール値を簡単に書き込む方法はありません。 これを行うには、代わりに out.writeByte((byte) (myBoolean?1:0))で対応する値を持つバイトを書き込みます。同様に、myBoolean = in.readByte()を使用して検索します。= 0;

以下のプロジェクトをチェックして、Parcelableを手動で作成しないようにしてください。

0

Parcelableは、Androidのためのより良いです: 1.それはParcellableは、このリンクをチェックすることが

関連する問題