FLAG_ACTIVITY_CLEAR_TOP and onActivityResult

8

我的活动栈是A B C,C位于顶部。A使用startActivityForResult()启动了B。

现在,在C中,它使用以下代码启动A并清除顶部:

        finish();

        intent = new Intent(this, A.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);

我的问题是,在上面的代码执行后,A中的onActivityResult()方法会被调用吗?我原本认为会被调用,因为B在C启动A并清除栈顶后已经被销毁。但是,我的测试代码显示A中的onActivityResult()方法没有被调用。我很困惑。有人能帮忙吗?
谢谢。

Kai,CLEAR_TOP的文档中说:“位于其上方的所有其他活动都将关闭,并且此Intent将作为新Intent传递给(现在处于顶部的)旧活动。” 但是,我怀疑“关闭”是文档中不恰当的选择。除非内存需求或它们调用finish(),否则Android通常不会“关闭”活动。这可能需要一些测试...我很想看看你发现了什么。 - DJC
2个回答

3

在您的代码中,您从ACTIVITY C启动了一个新的Activity A。这将不会调用onActivityResult。这只是因为启动了一个新的Activity A。只有当您finish()您的Activity B时,才会调用onActivityResult()。

如果这不清楚,我希望有人能添加更多答案。


onActivityResult()会在“您启动的活动退出时调用,为您提供了它启动时的requestCode、它返回的resultCode以及来自它的任何其他数据。如果活动明确返回了RESULT_CANCELED,没有返回任何结果或在其操作期间崩溃,则resultCode将是RESULT_CANCELED。”文档没有说明onActivityResult()取决于finish()。 - Kai
实际上,您可以通过调用finish()来退出Activity。根据我的理解,文档的意思就是这个。如果您使用CLEAR TOP从Activity C调用Activity A,则会再次创建Activity A,除非您的Activity A的launchmode设置为SINGLE TOP。因此,我认为您想要的是不可能的。如果您找到解决方案,请更新一下。谢谢。 - Varun

0
尝试将Activity A的launchMode设置为"value"singleTask",或者同时使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK标志。 默认情况下,Activity A的launchMode是standard,因此当您从C启动A时,将创建A的新实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接