Activityから設定画面などの別のIntentを呼び出した際の流れについて調べてみた。
呼び出したIntent(=Intent B)から結果を受け取るとき、呼び出したActivity(=Activity A)のonActivityResultをハンドリングして受け取るのだけど、Intent BでsetResultで結果をセットするのはどこが適切なのか、というのが気になって。
初め、Intent BのonStopで実行してみたのだけど、デバッガで処理を追ってみるとIntent BのonStopよりもActivity AのonActivityResultの方が先に呼び出されてることがわかった。
もっと詳しく調べてみると、Intent BでBACKボタンをタップした時、
Intent BのonKeyDownメソッド
↓
Intent BのonBackPressedメソッド
↓
Intent BのonWindowFocusChangedメソッド
↓
Intent BのonPauseメソッド
↓
Activity AのonActivityResultメソッド
↓
Intent BのonStopメソッド
と、こんな順に呼び出されてる。なのでIntent BのonStop内でsetResultで結果をセットしても、Activity AのActivity AのonActivityResultメソッドではその結果を受け取る事が出来ない。
onWindowFocusChangedやonPauseメソッドは別アプリに切り替わった時などでも呼ばれるので却下。そこで、onBackPressedメソッドで
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra(KEY, VALUE);
setResult(RESULT_OK, intent);
finish();
// TODO 自動生成されたメソッド・スタブ
//super.onBackPressed();
}
というようにすることでActivity AのonActivityResultメソッドで結果を受け取る事ができた。
0 件のコメント:
コメントを投稿