57

私は、ParcelableoverSerializableの速度を称賛する多くの投稿や記事を読んでいます。私はしばらくの間、インテントを介してアクティビティ間でデータを渡すために両方を使用してきましたが、2つを切り替えるときに速度の違いに気付くことはまだありません。転送する必要のあるデータの一般的な量は、それぞれ2〜5個のフィールドを持つ5〜15個のネストされたオブジェクトです。

転送可能でなければならないクラスが約30あるので、Parcelableを実装するには、メンテナンス時間を追加する多くの定型コードが必要です。私の現在の要件の1つは、コンパイルされたコードをできるだけ小さくすることです。Serializable over Parcelableを使用することで、ある程度のスペースを節約できると思います。

Parcelableを使用する必要がありますか、それともそのような少量のデータに対してSerializableを使用する理由はありませんか?または、Serializableを使用すべきでない別の理由がありますか?

4

4 に答える 4

69

インメモリでの使用に関しては、Parcelable は Serializable よりもはるかに優れています。Serializable を使用しないことを強くお勧めします。

ディスクに保存されるデータに Parcelable を使用することはできません (状況が変化した場合のデータの一貫性について十分な保証がないため) が、Serializable は非常に遅いため、そこでも使用しないことを強くお勧めします。自分でデータを書いたほうがいいです。

また、Serializable のパフォーマンス上の問題の 1 つは、多くの一時オブジェクトをスピンして終了し、アプリで多くの GC アクティビティが発生することです。かなり凶悪です。:}

于 2010-08-31T19:14:22.343 に答える
59

シリアライゼーションを引き続き使用します。シリアライゼーションは非常に遅く、非効率的であると言う人がオンラインでたくさんいます。それは正しいです。しかし、コンピューター プログラマーとして絶対にやりたくないことの 1 つは、パフォーマンスに関するコメントを絶対的なものとして受け取ることです。

シリアル化がプログラムの速度を低下させているかどうかを自問してください。活動から活動へと移行する時期に気づきますか? 保存/読み込み時に気づきますか? そうでない場合は、問題ありません。多くの手動シリアライゼーション コードを使用すると、フットプリントが小さくならないため、利点はありません。では、100 倍遅いということは 0.1 ミリ秒ではなく 10 ミリ秒を意味する場合、別の方法よりも 100 倍遅いとしたらどうでしょうか。あなたはどちらも見るつもりはないので、誰が気にしますか?そして、パフォーマンスに目に見える違いがないのに、30 個のクラスの手動シリアライゼーションを作成することに多大な労力を費やすのはなぜでしょうか?

于 2013-02-02T20:58:50.270 に答える
20

Parcelable は Serializable よりも優れていて高速であると誰もがやみくもに述べていますが、彼の主張を証明して裏付けようとした人は誰もいません。私はこれを自分でテストすることにしましたが、非常に興味深い結果が得られました。

平均的な Android デバイスでの通常の Java シリアライゼーションは (正しく行われた場合)、Parcelable よりも書き込みで約 3.6 倍、読み取りで約 1.6 倍高速です。

ここで私のテスト プロジェクトを確認できます: https://github.com/afrish/androidserializationtest

于 2015-03-29T16:08:10.837 に答える
1

JSONを使用してデータを文字列として渡すシリアル化を検討した人はいますか? GSON と Jackson は、Parcelable および Serializable の競合相手になるのに十分効率的である必要があります。

于 2015-06-03T08:24:05.190 に答える