启动另一个活动(以获取结果)的活动模式

4
我有一个活动,第一件事就是启动另一个需要返回结果的活动。当结果返回后,应该处理它,然后结束。我在onCreate()中调用了startActivityForResult()方法。
现在的情况是,有时候当我从目标活动返回时,onCreate()会再次被调用。这当然导致目标活动再次启动。
我知道这个行为是有道理的,但我不知道如何正确实现我的需求。当我从启动的活动返回时,我不想重新启动目标活动,我只想运行onActivityResult()并结束。
我看到有人建议设置状态偏好值,但这似乎容易出错,例如,如果它处于错误的状态,就会出问题。
您有什么想法吗?

为什么不在第一个活动中处理结果,而要去另一个活动呢?或者你是将其用作某种工厂吗? - xil3
我认为你的设计模式在这里存在缺陷。为什么需要一个不与用户交互,只处理结果的活动呢?听起来像是你需要一个服务。 - user432209
我无法控制第二个活动。 - Jeffrey Blattman
1
你能否在 onSaveInstanceState 中保存一个成员变量(在调用其他活动后更改)?您可以在 onCreate 中检查传递的 Bundle 中此变量的状态,以查看是否需要启动其他活动... - Damp
活动A监听SEND意图。当它接收到时,它首先从条形码中获取内容。然后它会“处理”条形码的内容。我的活动前面没有其他活动,所以我无法像几个地方建议的那样“去掉中间人”。 - Jeffrey Blattman
显示剩余5条评论
1个回答

2
关键是在onResume()中启动目标活动,而不是在onCreate()中。从关于onActivityResult()的javadoc中可以看出:

当您的活动重新启动时,在onResume()之前立即接收此调用。

换句话说,您可以确保在onResume()之前调用onActivityResult()...因此,例如,在onActivityResult()中设置一个标志,表示“这次不要启动目标活动”,因此当随后调用onResume()时,您可以避免重新启动目标活动。

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