シンクロニシティの問題があります。検索しましたが、私の質問と同じ条件の質問が見つかりません。ポインタは大歓迎です。
Eclipse 4.2.1 上の Android 4.1.2
私には 2 つの活動があります。それらを ListActivity と DetailActivity と呼びましょう。ListActivity でボタンを押すと、DetailActivity が開始されます。ユーザーが DetailActivity のデータに変更を加えてから [戻る] ボタンをクリックすると、2 つのことを行います。まず、ダーティ フラグが true の場合に変更をデータベースに保存します。次に、Intent を ListActivity の onActivityResult() メソッドに返します。
問題はタイミングの 1 つです。データベースの更新を行いたいので、DetailActivity の onStop() メソッドでこれを行うのがベスト プラクティスであると読みました。データベースを更新した直後に、Intent を設定し、DetailActivity で setReult() メソッドを呼び出します。
_resultIntent = new Intent();
_resultIntent.putExtra(ListActivity .DETAIL_RESULT, _currentData);
Log.d("ListActivity.setUpReturn()", "checkpoint");
setResult(Activity.RESULT_OK, _resultIntent);
結果を設定する前に、ListActivity の onActivityResult() メソッドが呼び出されます。ログ呼び出しを全体に配置しましたが、次のように表示されます。
1) ユーザーが DetailActivity にいて、いくつかのデータを変更してダーティ フラグを true に設定します。
2) ユーザーがシステムの戻るボタンをクリックします。
3) DetailActivity が画面から消えます。
4) ListActivity が再表示されます。
5) ログは、ListActivity の onActivityResult()、onRestart()、onStart()、および onResume() メソッドがこの順序で実行されることを示し
ます。 6) その他の内容がログに記録されます。
7) ログは、DetailActiviy の onStop() メソッドが実行されることを最終的に記録します。
これは、データベースを更新して結果の Intent を設定するまでに、呼び出しアクティビティがそれを使用するポイントをすでに過ぎていることを意味します。
データベースを常に更新したくありません。ベストプラクティスが言うように、これを onStop() メソッドに入れたいのですが、タイミングの問題を回避する方法がわかりません。助言がありますか?私は明らかに間違ったことをしていますか?