新しいアクティビティを開始し、現在のアクティビティのデータを渡すとします。データがプリミティブ型の場合、インテントを使用してエクストラを追加するだけで済みますが、配列リストやオブジェクトなどのより複雑なデータ構造に対してこれをどのように行うのでしょうか。
20582 次
2 に答える
60
いくつかのオプションがあります。
- より複雑な構造を、
Parcelable
インターフェースを実装するクラスにラップすることができます。これは、追加のストレージに格納できます。 - より複雑な構造を、
Serializable
インターフェースを実装するクラスにラップすることができます。これは、追加のストレージに格納できます。 - それらはすべて同じプロセスにあるため、静的データメンバーを使用してデータを渡します
- 外部ストレージ(ファイル、データベース、
SharedPreferences
)を使用します - 投稿したばかりの人が指摘したように、カスタム
Application
やローカルなどの一般的なコンポーネントを使用しますService
あなたがしたくないことは、エクストラを介して大きなものを渡すことです。たとえば、カメラから写真を取得するアプリケーションを作成している場合、それらをエクストラに渡したくない場合は、静的データメンバーを使用します(そのように聞こえますが)。インテントはクロスプロセスで機能するように設計されています。つまり、大量のデータコピーが実行されるため、大きなものに必要ない場合は避けたいと考えています。
于 2009-09-17T23:48:32.170 に答える
2
私が知っているオプションの1つは、使用しているデータを、すべてのアクティビティがコンテキストから取得できるApplicationオブジェクトに格納することです。
また、より高性能なソリューションを実現するためにGoogleProtocolBufferを使用することも聞いたことがあります。
于 2009-09-17T23:46:08.527 に答える