6

我有 2 项活动 AAA 和 BBB。我使用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() 中设置,而实际上 onPause() 在 onBackPressed() 之后被调用。我已经浏览了开发文档中的活动流程,并且我很清楚那里提到的内容。

有人对这种行为有任何想法或可以更好地解释吗?

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()因为onPause()可以在从BBB开始新活动时调用。

于 2012-04-05T07:08:55.150 回答
1

我认为这里的问题可能是在您已经返回上一个活动之后可能会调用 onPaused。我在其他测试中看到了类似的行为。尝试添加一些 Log.d 打印输出以确认 onPause 调用与 onActivityResult 调用的顺序。

于 2012-04-05T07:08:33.373 回答
0

最有可能的情况必须是生命周期方法。

当您在 BBB acctivty 中按下返回键时,首先调用 onPause() 以便您在 onPause() 中设置一些内容,然后此方法之后是 onStop(),然后是 OnDestroy(),因为活动正在完成。所以现在,如果你在 onPause() 中设置了一些东西,它就会被设置,但是随着它的后面是 onDestroy(),操作系统可能会在这个活动完成时强制取消你的任务。

此外,如果您在 onPause() 中设置了某些内容,那么如果您的应用程序失去焦点或被最小化,那么 onPause() 也被调用可能是您的应用程序的稳定性可能会丢失。所以建议不要使用 onPause(),最好使用 onKeyUp() 或 onBackPressed()。

于 2012-04-05T07:31:47.970 回答