6

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

AAA で、onActivityResult(int requestCode, int resultCode, Intent data)で結果を確認すると、RESULT_CANCELLED が取得され続けます。

google/stackoverflow にしばらく費やした後、onBackPressed()をオーバーライドして結果を設定すると、まったく問題なく動作することがわかりました。

私が理解できないのは、実際にはonPause()がonBackPressed()の後に呼び出されるのに、なぜ結果がonPause()に設定されないのかということです。私は Dev docs のアクティビティ フローを確認しましたが、そこに記載されている内容についてはかなり明確です。

誰かがこの動作について何か考えを持っているか、それをよりよく説明できますか?

4

3 に答える 3

5

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.

電話setResultしてfinish()ください。BesauseonPause()は、新しいアクティビティがBBBから開始されるときに呼び出すことができます。

于 2012-04-05T07:08:55.150 に答える
1

ここでの問題は、前のアクティビティに既に戻った後に onPaused が呼び出される可能性があることだと思います。他のテストでも同様の動作を見ました。いくつかの Log.d プリントアウトを追加して、onPause 呼び出しと onActivityResult 呼び出しの順序を確認してみてください。

于 2012-04-05T07:08:33.373 に答える
0

ほとんどの場合、ライフサイクルメソッドに違いありません。

BBB アクティビティで戻るキーを押すと、最初に onPause() が呼び出されるため、onPause() に何かを設定すると、このメソッドの後に onStop() が続き、アクティビティが終了しているため、さらに OnDestroy() が続きます。したがって、onPause() で何かを設定すると、設定されますが、その後に onDestroy() が続くため、このアクティビティが終了すると、OS が強制的にタスクをキャンセルする可能性があります。

また、onPause() で何かを設定すると、アプリケーションがフォーカスを失ったり最小化されたりすると、onPause() も呼び出され、アプリの安定性が失われる可能性があります。そのため、onPause() を使用しないことをお勧めします。onKeyUp() または onBackPressed() を使用することをお勧めします。

于 2012-04-05T07:31:47.970 に答える