Androidのアクティビティ間で非プリミティブ型のデータを渡す
-
10-07-2019 - |
質問
新しいアクティビティを開始し、現在のアクティビティからのデータを渡すとします。データがプリミティブ型である場合、単純にインテントを使用してエクストラを追加できますが、配列リストやオブジェクトなどのより複雑なデータ構造に対してこれを行うにはどうしますか?
解決
いくつかのオプションがあります:
-
Parcelable
インターフェースを実装するクラスで、より複雑な構造をラップすることができます。これは追加で保存できます -
Serializable
インターフェースを実装するクラスに、より複雑な構造をラップすることができます。これは、追加で保存できます - すべてが同じプロセスにあるため、静的データメンバーを使用してデータをやり取りします
- 外部ストレージ(ファイル、データベース、
SharedPreferences
)を使用しています - 投稿した人が指摘したように、カスタム
Application
やローカルのService
などの一般的なコンポーネントを使用します
やりたくないことは、エクストラ経由で大きなものを渡すことです。たとえば、カメラから写真を取得するアプリケーションを作成している場合、それらを余分に渡すのは望ましくありません-静的データメンバーを使用します(その音はうるさいです)。インテントはプロセスにまたがって機能するように設計されています。つまり、大量のデータのコピーが行われることを意味します。大きなものが不要な場合は避けてください。
他のヒント
私が知っているオプションの1つは、すべてのアクティビティがコンテキストから取得できるApplicationオブジェクトに使用しているデータを保存することです。
Googleプロトコルバッファを使用して達成したことも聞いたことがありますより高性能なソリューション
所属していません StackOverflow