按“返回”按钮时,未使用setResult()在onPause()中设置结果

时间:2012-04-05 06:59:34

标签: android

我有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。

在谷歌/ stackoverflow上花了一些时间后,我发现如果我覆盖 onBackPressed()并在其中设置结果,那么它的工作原理非常好。

我无法理解的是,为什么结果没有在onPause()中设置,实际上在onBackPressed()之后调用onPause()。我已经完成了Dev文档中的活动流程,我很清楚那里提到的内容。

任何人对此行为有任何想法或者可以更好地解释一下吗?

3 个答案:

答案 0 :(得分: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.

setResult中致电finish()。当新活动从 BBB 开始时,可​​以调用onPause()

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

当您按BBB中的后退键时,首先调用onPause(),因此您在onPause()中设置了一些东西然后 此方法后面是onStop(),然后是OnDestroy(),因为活动正在完成。 所以现在如果你在onPause()中设置了一些东西,那么它就会被设置,但是当它跟在onDestroy()之后,操作系统可能会在此活动结束时强制取消你的任务。

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