24

新しいアクティビティを開始し、現在のアクティビティのデータを渡すとします。データがプリミティブ型の場合、インテントを使用してエクストラを追加するだけで済みますが、配列リストやオブジェクトなどのより複雑なデータ構造に対してこれをどのように行うのでしょうか。

4

2 に答える 2

60

いくつかのオプションがあります。

  1. より複雑な構造を、Parcelableインターフェースを実装するクラスにラップすることができます。これは、追加のストレージに格納できます。
  2. より複雑な構造を、Serializableインターフェースを実装するクラスにラップすることができます。これは、追加のストレージに格納できます。
  3. それらはすべて同じプロセスにあるため、静的データメンバーを使用してデータを渡します
  4. 外部ストレージ(ファイル、データベース、SharedPreferences)を使用します
  5. 投稿したばかりの人が指摘したように、カスタムApplicationやローカルなどの一般的なコンポーネントを使用しますService

あなたがしたくないことは、エクストラを介して大きなものを渡すことです。たとえば、カメラから写真を取得するアプリケーションを作成している場合、それらをエクストラに渡したくない場合は、静的データメンバーを使用します(そのように聞こえますが)。インテントはクロスプロセスで機能するように設計されています。つまり、大量のデータコピーが実行されるため、大きなものに必要ない場合は避けたいと考えています。

于 2009-09-17T23:48:32.170 に答える
2

私が知っているオプションの1つは、使用しているデータを、すべてのアクティビティがコンテキストから取得できるApplicationオブジェクトに格納することです。

また、より高性能なソリューションを実現するためにGoogleProtocolBufferを使用することも聞いたことがあります。

于 2009-09-17T23:46:08.527 に答える