Android 按下“上一步”按钮时,使用setResult()在onPause()中未设置结果

Android 按下“上一步”按钮时,使用setResult()在onPause()中未设置结果,android,Android,我有两个活动AAA和BBB。我使用startActivityForResult(Intent,int)从AAA调用BBB。完成BBB后,我按后退按钮返回AAA。在BBB中,我覆盖onPause(),并使用setResult(result\u OK)设置结果 在AAA中,我在activityResult(int requestCode、int resultCode、Intent data)中检查我的结果,并且我一直得到取消的结果 在google/stackoverflow上花了一段时间之后,我发现

我有两个活动AAA和BBB。我使用startActivityForResult(Intent,int)从AAA调用BBB。完成BBB后,我按后退按钮返回AAA。在BBB中,我覆盖onPause(),并使用setResult(result\u OK)设置结果

在AAA中,我在activityResult(int requestCode、int resultCode、Intent data)中检查我的结果,并且我一直得到取消的结果

在google/stackoverflow上花了一段时间之后,我发现如果我覆盖onBackPressed(),并在其中设置结果,那么它的效果绝对不错

我不明白的是,为什么在onPause()中没有设置结果,而实际上onPause()在onBackPressed()之后被调用。我已经浏览了Dev文档中的活动流程,我非常清楚这里提到的内容


有人对这种行为有什么想法或者可以更好地解释吗

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

您应该查看
onActivityResult
参考


finish()
中调用
setResult
。因为当新活动从BBB开始时,可以调用
onPause()
,最可能的情况是生命周期方法

当您在BBB中按back键时,首先调用onPause(),这样您就可以在onPause()中设置一些内容 此方法后面是onStop(),后面是ondestory(),因为活动正在完成。 因此,现在如果您在onPause()中设置了某个内容,那么它将被设置,但当它后面跟着onDestroy()时,操作系统可能会在该活动完成时取消您的任务


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

事实上,这应该不是问题,因为根据开发文档,流已设置,我检查过,活动流也已组织,因此我没有选择覆盖finish()来设置结果或onBackPressed()。至于可能被取消的3个选项,它肯定不是崩溃选项。这可能是第二种选择。我不知道怎么检查。在onPause()中显式设置resultcode后,不确定是否有其他函数设置了它。我还尝试在onPause()中调用finish()。为什么在onPause()中调用finish()。onPause()在转到后台时调用。如果从BBB按home按钮,则将调用onPause()。当onBackpressed()调用finish()时,也会调用。这就是为什么onBackpressed()中的setResult()可以工作的原因。你为什么不把结果放在这两种方法中呢?我尝试了各种各样的方法,试图找出流量和导致这种行为的原因。我同意单击Home按钮时会调用onPause(),但这仍然不能回答我的问题,即为什么我在onPause()中显式设置的结果在单击back按钮时不会传播到AAA。确定。谢谢你弄明白了。请看复制的源代码
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.