2009-09-17 10 views
23

新しいアクティビティを開始し、現在のアクティビティからいくつかのデータを渡したいとします。データがプリミティブ型の場合は、単純にインテントを使用してエクストラを追加することができますが、arraylistsやオブジェクトなどのより複雑なデータ構造に対してはどのようにしますか?androidのアクティビティ間で非プリミティブ型のデータを渡す

答えて

58

を達成するためにGoogle Protocol Bufferを使用してのことを聞いたあなたは、いくつかのオプションがありき:あなたはParcelableインタフェースを実装するクラスでは、より複雑な構造をラップすることができ

  1. を、どの余分に格納することができます
  2. Serializableインターフェイスを実装するクラスでより複雑な構造体をラップすることができます。これは余分に格納することができます
  3. 彼らは
  4. すべて同じプロセスであるので、あなただけの投稿者がこのような、共通コンポーネントを使用し、指摘したようにあなたは、外部記憶装置(ファイル、データベース、SharedPreferences
  5. を使用し、周りのものを渡すために静的データメンバを使用しますカスタムとしてApplicationまたはローカルService

あなたがしたくないことは、エクストラ経由で大きなものを渡すことです。たとえば、カメラから写真を取得するアプリケーションを作成している場合、それらを余分なものに渡すことは望ましくありません。静的なデータメンバを使用します(それは耳障りです)。インテントは、クロスプロセスで動作するように設計されています。つまり、大量のデータをコピーする必要があります。大量のデータをコピーする必要はありません。

+0

私が疑ったような選択肢がたくさんあります。ありがとう!この特定のプロジェクトでは、オプション3を選ぶことにしました。それはかなりではありませんが、それは仕事です! – aspartame

+0

私はParcelablesの大ファンです...彼らは簡単に構築することができ、簡単に渡すことができます。 –

+5

私はそれらを憎む。彼らはメンテナンスの悪夢で、非常にエラーが発生しやすいです。単純にオブジェクトをシリアライズ可能なものとして渡すだけの利点は、パフォーマンスが向上することです。 – Matthias

2

あなたが使用しているデータをすべてのアクティビティがコンテキストから取得できるApplicationオブジェクトに格納することを私が認識しているオプションがあります。

私はまた、より高性能ソリューション

+0

私は、Appide Objectに対して争っているいくつかの投稿を読んだことがあります。たとえば、http://www.developerphil.com/dont-store-data-in-the-application-object/ – Muhammad

関連する問題