2012-04-05 14 views
5

2つのアクティビティAAAとBBBがあります。私はstartActivityForResult(Intent、int)を使ってAAAからBBBを呼び出します。私がBBBでやった後、戻るボタンを押してAAAに戻ります。 BBBでは、onPause()をオーバーライドし、setResult(RESULT_OK)を使用して結果を設定します。戻るボタンを押したときにsetResult()を使用してonPause()に結果が設定されない

AAAでは、onActivityResult(int requestCode、int resultCode、インテントデータ)で結果をチェックし、RESULT_CANCELLEDを取得し続けます。

いつgoogle/stackoverflowで支出した後、onBackPressed()をオーバーライドしてその結果を設定すると、正常に動作することがわかりました。

実際にonBackPressed()の後にonPause()が呼び出されると、結果がonPause()に設定されないのはなぜですか?私はDevドキュメントのアクティビティフローを見てきましたが、そこに何が記述されているかについてはっきりしています。

誰でもこの動作についてのアイデアがありましたか、それとも良く説明できますか?

+1

重複したhttp://stackoverflow.com/questions/2679250/setresult-does-not-work-when-back-button-pressed – pjv

答えて

0

私は以前のアクティビティに戻った後にonPausedが呼び出される可能性があります。他のテストでも同様の動作が見られました。 OnPause呼び出しとonActivityResult呼び出しの順序を確認するために、Log.dの出力をいくつか追加してみてください。

+0

私は、活動の流れも整理されていることを確認しました。ケース http://developer.android.com/guide/topics/fundamentals/activities.html#CoordinatingActivities – Shubhayu

4

onActivityResultを参照してください。 http://developer.android.com/reference/android/app/Activity.html#onActivityResult%28int,%20int,%20android.content.Intent%29

Called when an activity you launched exits, giving you the requestCode you started it with, the resultCode it returned, and any additional data from it. The resultCode will be RESULT_CANCELED if the activity explicitly returned that, didn't return any result, or crashed during its operation. 

You will receive this call immediately before onResume() when your activity is re-starting. 

コールfinish()setResult。新しいアクティビティがBBBから始まる場合、onPause()が呼び出されます。

+0

私は、finish()またはonBackPressed()をオーバーライドして結果を設定するオプションがありました。 RESULT_CANCELLEDにできる3つのオプションまでは、間違いなくクラッシュオプションではありません。それは第二の選択肢かもしれない。それを確認する方法を知らない。私がonPause()で明示的にそれを設定した後、他の関数がresultcodeを設定しているかどうかはわかりません。また、onPause()でfinish()を呼び出してみました。 – Shubhayu

+0

なぜonPause()でfinish()を呼び出していますか? onPause()は、バックグラウンドに移動するときに呼び出されます。 BBBからホームボタンを押すと、onPause()が呼び出されます。そしてonBackpressed()がfinish()を呼び出して呼び出されたときにも呼び出されます。そのため、onBackpressed()のsetResult()が機能します。なぜあなたはその2つの方法で結果を入れないのですか? – Shaiful

+0

私は、流れを理解しようとするさまざまなことを試していました。ホームボタンがクリックされたときにonPause()が呼び出されることに同意しますが、それでもまだ私の質問に答えることはできません。なぜなら、私がonPause()で明示的に設定した結果が、 – Shubhayu

0

ほとんどの場合、ライフサイクルの方法である必要があります。 このメソッドの後にonStop()があり、さらにアクティビティが終了しているため、OnDestroy()の後にBBB acctivtyのbackキーを押すとonPause()が呼び出されます。 これで、onPause()に何かを設定すると、設定されていますが、onDestroy()の後にOSが強制的にあなたのタスクをキャンセルする可能性があります。

また、あなたがonPause()に何かを設定すると、アプリケーションがフォーカスを失ったり最小化されたりすると、onPause()も呼び出され、アプリケーションの安定性が失われる可能性があります。だからonPause()を使わないで、onKeyUp()とonBackPressed()のどちらかを使うほうが良いでしょう。

+0

実際には、Dev Docsによれば、フローが設定されているため、問題ではありません。 http://developer.android.com/guide/topics/fundamentals/activities.html#CoordinatingActivities – Shubhayu

関連する問題