異なるアクティビティ間で状態データを渡すのに問題があります。現在、私はそれらのうちの4つを持っています:
- アクティビティ間の座標 (大きな onActivityResult メソッド) であり、実際の UI はありません (空白のレイアウトのみ)。
- Bはいくつかのデータを追加します(文字列)
- C いくつかのデータを追加します (写真を撮る)
- D はアップロード前のデータのレビューを示し、その後状態は削除されます
最初に、このワークフローの状態をアクティビティ A のインスタンス変数に保存しましたが、ほとんどの場合、Android は B から戻ったときに A をガベージ コレクションしていたため (おそらく方向の変更が原因で)、Null ポインター例外が発生していました。次に、B が結果とともに A に戻ったときに作成されたパーセル可能なオブジェクト内に状態を保存してから、そのオブジェクトを C に渡してみました。C に問題なく到着しますが、オブジェクトを C から再度パーセルして返すときにAになぜか届かない。これにより、オブジェクトを A から D に渡そうとすると、別の NPE が発生します。
最後に、データを削除する必要があります: アップロード後に D によって、またはアプリを途中で閉じてすべてのアクティビティを完了しない場合。A (または実際に使用可能なアクティビティである B) からやり直すことになります。
今では、私の現在の構造は、本来あるべきよりもはるかに複雑になっていると感じています. アクティビティAはカットすべきだと思います。しかし、その代わりに何を実装すればよいかわかりません。また、アクティビティ C を 2 回または 3 回繰り返し可能にする方法についてもわかりません。毎回データを追加してから、D に進みます。私が見つけた可能な解決策:
- FLAG_ACTIVITY_FORWARD_RESULT でインテントを使用し、複数のアクティビティを通じて結果を返す方法で説明されているように、アクティビティをチェーンします。
- サービスを使用して状態を管理する
- 現在机の上にある本から: Fragments を使用して状態を保存する (setRetainInstance メソッドを使用)
- android.app.Application を拡張して状態を管理する
- 状態を SharedPreferences に保存する (しかし、ハウスキーピングはどこで行うのでしょうか?)
私は Android 開発に不慣れです...おそらく遅かれ早かれすべてが機能するようになるでしょうが、私の場合の適切な解決策は何ですか?