startActivityForResult(...) 立即返回 0

Posted

技术标签:

【中文标题】startActivityForResult(...) 立即返回 0【英文标题】:startActivityForResult(...) immediately returns 0 【发布时间】:2016-03-10 14:23:23 【问题描述】:

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

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

【问题讨论】:

你在 logcat 上看到什么可疑的东西了吗? @pskink 没什么,活动和片段调用 onPause 然后 onActivityResult 结果为 0 顺便说一句,这是您的活动(被称为活动)吗? 【参考方案1】:

我在运行 Android 4.4.2 API 17 的三星 Galaxy S4 上遇到了类似的行为。 我开始了一个活动:

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

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

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

删除此行肯定会解决问题。

【讨论】:

【参考方案2】:

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

【讨论】:

只是浪费了几个小时试图调试这个问题,这个答案肯定解决了这个问题!【参考方案3】:

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

当你从刚刚启动的活动返回时使用startActivityForResult,请检查你是否有setResultRESULT_OK

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

【讨论】:

cancell在startActivityForResult之后returned,但是before的activity竟然被创建了,所以不是setResult错位的点

以上是关于startActivityForResult(...) 立即返回 0的主要内容,如果未能解决你的问题,请参考以下文章

Fragment的startActivityForResult和Activity的startActivityForResult的区别

如何在 onActivityResult 中调用 startActivityForResult?

startActivityForResult和setResult详解

Android------startActivityForResult

startActivityForResult详解

如何从 TabHost Activity 返回结果(startActivityForResult)?