5

アプリのパフォーマンスを向上させたい。私の頭に浮かぶことの1つは、シリアル化可能なすべてのインテントバンドルパラメーターをパーセル可能に置き換えることです。

私はこのスレッドを見つけました:オブジェクトをシリアル化する代わりにParcelableを使用する利点

ある本から、パーセル可能はプロセス間通信にのみ使用されることを意図していると述べている人がいますか?それはおそらく最新ではないでしょう?それは、少なくとも技術的には可能だからです。

次に、実装がデバイス間で異なるため、パーセラブルは信頼できないというステートメントもあります。これは、API 7以降、すべてのデバイスとAPIで常に機能するようにしたいので、もちろん致命的な特性になります。

また、Externalizableの使用やカスタムプロトコルの実装に関するアドバイスもいくつか読んでいます...しかし、Parcelableが信頼できない理由、Android開発者がすべてのデバイスで機能しないものについてこのような話題を呼んでいる理由がわかりません。それともコメントは真実ではありませんか?

Parcelableを実装する価値はありますか?シリアライズ可能に固執しますか?または、カスタムシリアル化/外部化可能は正しいアプローチですか?

「試してみてください」と言わないでください。特に、Parcelableが信頼できるかどうか(デバイスが足りないかどうか)を確認する時間がありません...経験が必要です...

ありがとう。

PSまた、「ほとんどの場合、Serializableは受け入れられます」とは言わないでください。確かに受け入れられますが、時間があるので、ユーザーエクスペリエンスが向上する場合は、Parcelable(または他の何か)で使用したいと思います。

4

2 に答える 2

6

Parcelableすべてのデバイスで常に、常に動作します。そうでなければ、何も機能しません。Androidの内部はに大きく依存していParcelableます。

Parcelableよりも少し効率的ですSerializableが、それが「ユーザーエクスペリエンス」に大きな影響を与えるかどうかは真剣に疑っています(もちろん、あらゆる場所で使用し、非常に大きく複雑なオブジェクトをシリアル化する場合を除きます)。

パフォーマンスの問題が発生していると思われる場合は、アプリケーションのプロファイリングと、アプリケーションがどこで時間を費やしているかに関する経験的データの収集に、利用可能な時間を費やします。IMHOの置き換えSerializableParcelable、比較的低レベルの実装最適化であり、知覚可能なパフォーマンスの向上はほぼゼロになる可能性があります。

于 2012-08-16T19:41:57.277 に答える
4

誰かが本から、パーセルブルはプロセス間通信にのみ使用されることを意図していると述べていますか? それはおそらく最新のものではありませんよね?少なくとも技術的には可能だからです。

Parcelable がアクティビティ間で渡されることを意図していなかったのに、API レベル 1 からputExtra (String name, Parcelable value) Intent メソッドが存在するのはなぜですか?

次に、実装がデバイスによって異なるため、parcelable は信頼できないというステートメントもあります。API 7 以降、すべてのデバイスと API で常に動作するようにしたいので、これはもちろん致命的な特徴です。

小包のドキュメントを引用させてください。

Parcel は、汎用のシリアル化メカニズムではありません。このクラス (および任意のオブジェクトを Parcel に配置するための対応する Parcelable API) は、高性能 IPC transportとして設計されています。そのため、パーセル データを永続ストレージに配置することは適切ではありません。パーセル内のデータの基になる実装を変更すると、古いデータが読み取れなくなる可能性があります。

ここでは、パーセル データを永続ストレージに保存しないことに関するアドバイスしか読むことができません。私の個人的な経験から、Parcelable はアクティビティ間でデータを渡す際に問題になることはありませんでした。私はそれを頻繁に使用し、API 8 から現在の API までサポートしています。

パフォーマンスと速度に関しては、Android 固有の高性能 IPC トランスポートシリアル化メカニズムである Parcelable を使用する方が優れていることが確立されています。ただし、実際に改善を確認するには、使用量に依存する必要があります.

于 2012-08-16T19:48:29.377 に答える