2012-04-25 28 views
12

"A"と "B"の2つのアクティビティを持つアプリがあります。onActivityResult()を待機中のonDestroy()

"A"はstartActivityForResult()を使用して "B"を生成します。つまり、 "B"を待機します。さて、 "B"が前景にあるとします。 Androidシステムが「B」を破壊することなく、アクティビティ「A」を破壊することはできますか? (「はい」の場合、ユーザー入力後に「B」が終了した場合、アクティビティ「A」を再作成してAndroidシステムによってフォアグラウンドに戻す必要があります)、「A」を元のUIステータスに戻して復元する必要があります。 )

は、プロセスが終了すると、すべてのアクティビティが強制終了され、onDestroy()が呼び出されないか、呼び出されないことが保証されていない場合があります。問題は、単にサブアクティビティの結果を待つ間にonDestroy()が可能かどうかということだけです。

答えて

12

活動AがBの終了時間によって殺されている場合、あなたは

  1. 再作成されることが保証されています。
  2. 結果を返します。

つまり、次回ユーザーがアクセスしたときにAが再作成され、その時点で保留中の結果が(BからAに)配信されます。

これは、任意のコールバックオブジェクトではなく、整数要求コードを使用して1つのアクティビティコールバックで結果を返す必要があることにも注意してください。

+0

ありがとう、それは私がそれを考えていた方法です、onDestroyが起こる可能性があります。だからあなたはそれが "A"に起こると言います。しかし、この場合、 "A"が再起動します。つまり、onCreate()も取得されます(つまり、ドキュメントではonResume()の前に結果が得られます)。 "、 右?つまり、「B」は「A」の特定のサブメニューで開始されるので、「B」が開始されたときと同じように「B」が終了すると、UI状態「A」が同じであるとユーザは期待する。 (つまり、 "A"は "B"が起動されたときと同じサブメニューにあります)。 "はい"の場合、 "B"が生成される前に "A"のUI状態をwell_に維持する必要があります。 –

+0

あなたの質問を誤解している場合は私を修正しますが、 'startActivityForResult'とは何の関係もないActivityライフサイクルについてもっと一般的な質問をしているようです。結果がBからAに(Aが破棄されたかどうかにかかわらず)渡されることが保証されますが、これはアクティビティの状態が保持されることを意味しません。 'onDestroy'が呼び出された場合、あなたが遭遇する他のアクティビティの場合のように、' onRestoreInstanceState'(または 'onResume')で再作成された時の状態を復元したいかもしれません。 –

+0

私はこれらの2つの点がより明確になることを願っています: 1.追加の制約が設定されているかどうかを確かめることができないので、startActivityForResultと関係があります。つまり、一般的に_ Aが破棄される可能性があります。それが「B」からの結果を待っている場合はそうです。 (つまり、そのような場合、「最悪」はonStop()です)。しかし、あなたの答えに基づいて、この場合でも「B」の破壊が起こる可能性があります。 (もちろん、異なるプロセスのアクティビティの場合、独立した破壊が可能であることは明らかですが、私の場合は同じapp/processにあります)。 –

関連する問題