Parcelable
(速い)とSerializable
(遅い)のパフォーマンスの違いを知っています。ただし、特定のアプリケーション情報を1つのライフサイクル内だけでなく永続的に保存する必要があるため、onSaveInstanceStateおよびParcelableオブジェクトを利用する関連メソッドは適切ではありません。
だから私はに注意を向けましたSerializable
。主にAbstractList
保存するタイプがあります-を実装しているので問題ありませんSerializable
。しかし、私がこれらの中に保存するタイプの多くは、そうではParcelable
ありません。Serializable
RectF
パーセルを簡単に生成し、Parcelable.writeToParcel(parcel, flags)
それを呼び出してシリアル化および逆シリアル化できるmarshall()
を作成できるので、「問題ありません」と思いました。byte[]
ジェネリックを使用すると思いました。SerializableParcelable<Parcelable> implements Serializable
クラスを作成し、Parcelable
シリアル化するすべてのタイプに1つのソリューションを提供します。次に、たとえば、各RectFをこのラッパー内ArrayList
に格納します。リストとそのParcelable
内容はシリアル化可能です。
ただし、APIドキュメントにはmarshall()
、永続ストレージに使用してはならないことが記載されています。
public final byte [] marshall()
区画の生のバイトを返します。
ここで取得するデータは、いかなる種類の永続ストレージ(ローカルディスク上、ネットワーク経由など)にも配置しないでください。そのためには、標準のシリアル化または別の種類の一般的なシリアル化メカニズムを使用する必要があります。パーセルマーシャリング表現は、ローカルIPC用に高度に最適化されているため、プラットフォームのさまざまなバージョンで作成されたデータとの互換性を維持しようとはしません。
だから今私は立ち往生しています。この警告を無視して上記で概説したルートに従うか、Parcelable
シリアル化する各個人を拡張してオーダーメイドのシリアル化メソッドを作成することで問題を回避できます。これは時間と労力の非常に無駄に思えます。
誰かがParcelable
使用せずにオブジェクトをシリアル化するための「正しい」ショートカットを知っていmarshall()
ますか?または、指定された警告に注意せずに耕す必要がありますか?おそらくSQLiteデータベースがその方法ですが、よくわかりません。アドバイスをお願いします。
どうもありがとう。