【问题标题】:Wait for result from another activity等待另一个活动的结果
【发布时间】:2012-04-10 19:47:52
【问题描述】:

在一项活动(比如 A)中,我必须根据另一项活动 (B) 的结果执行某项任务。我使用 startActivityForResult() 开始活动 B。伪代码是这样的: (在活动 A 中)

//Statements
//startActivityForResult(activityB)
//get the result in some local variable for activity A. result is a boolean
//if(result==true) do something
//else do something else

现在我面临的问题是,在启动活动 B 后,它不会等待结果从 B 到达。相反,它继续并使用布尔结果的默认值。 有什么解决办法吗?

如果这个特定的块在另一个线程中,我可以编写一个同步块并 在启动活动 B 后发出 wait(),然后在 onActivityResult() 中发出 notify()。 但既然只有一个线程,那不是一个选项吧?

应该提到 activityB 接受用户输入是/否并返回。所以在启动它时,结果不是立即可用的

【问题讨论】:

    标签: android android-activity concurrency synchronization


    【解决方案1】:

    有什么办法吗?

    将代码清单的最后两行放在onActivityResult() 中,described in the Android documentation 也是如此。

    更重要的是,你还需要重写activityB才能真正按照使用setResult()的说明将结果传回activityA。

    【讨论】:

    • 我可以毫无困难地从 activityB 获取结果。我得到了想要的结果。但是在activityA中,在startActivityForResult()行之后,它只是使用变量result的默认值。应该提到 activityB 接受用户输入是/否并返回它。所以在启动它时,结果不是立即可用的。
    • @Alabhya: “但是在 activityA 中,在 startActivityForResult() 行之后,它只是使用变量 result 的默认值进行。” - 当然。 startActivityForResult() 不是阻塞调用,返回时activity尚未启动。
    • 哦。我以为它会阻塞。那么替代方法是什么?有没有办法使用等待通知或类似的东西。
    • @Alabhya:“那么替代方法是什么?” -- 重新阅读我的答案。
    • 问之前我怎么没有意识到这一点。阅读您的答案后,我怎么没有意识到这一点!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2021-02-26
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多