startActivityForResult(...) 立即 returns 0

startActivityForResult(...) immediately returns 0

当我在 Samsung 上调用 startActivityForResult(new Intent(getActivity(), VkAuth.class), VK_ID); 时(在 HTC 和 Nexus 上一切正常),onActivityResult requestCode == VK_ID 和结果代码 0 (Cancelled) 在VkAuth Activity 已创建。
父 Activity 有 android:launchMode="singleInstance"startActivityForResult 从附加到父 Activity 的片段调用。 日志

E/AuthenticationFragment: vkLogIn
E/AuthenticationFragment: startActivityForResult 9101
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/MainActivity: onActivityResult before super: request - 271245, result - 0
E/AuthenticationFragment: request - 9101, result - 0
E/MainActivity: onActivityResult after super: request - 271245, result - 0
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/VkAuth: onCreate
E/VkAuth: onResume

您没有发布足够的代码让我们真正看到发生了什么,但我会检查以下内容:

当您return从activity刚开始使用startActivityForResult时,请检查您是否有setResultRESULT_OK:

Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);

在我删除 android:launchMode="singleInstance" 后,这种不当行为停止了

我在 Samsung Galaxy S4 运行 Android 4.4.2 API 17 上有类似的行为。 我开始了一个 Activity 与:

Intent intent = new Intent(this, MyActivity.class);
startActivityForResult(intent, CUSTOM_CODE);

然而 onActivityResult 立即被调用 resultCode=0 (ACTIVITY.RESULT_CANCELED)。它在其他设备上运行良好。

根据@Yarh 所说,我查看了AndroidManifest 并发现执行startActivityForResult 的Activity 有android:launchMode="singleInstance"

删除这一行确实解决了这个问题。