我有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文档中的活动流程,我很清楚那里提到的内容。
任何人对此行为有任何想法或者可以更好地解释一下吗?
答案 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()。