与显式尝试同时启动隐式意图并完成活动

时间:2019-01-17 20:44:48

标签: android android-intent

在我的应用中,已通过身份验证的用户可用的选项之一是删除其帐户。当他们选择此选项时,我想做三件事:

  1. 启动访问网站的隐式意图,例如进行调查或其他事情
  2. 明确意图进入应用程序的简介/启动活动
  3. 完成当前活动

这是“删除帐户”按钮的点击处理程序:

val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
startActivity(intent1)

val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent2)
finish()

实际上发生的是介绍/启动活动,当前活动已完成,但浏览器未启动。我不知道这些标志对于真正的意图是否真的必要。

如果我将点击处理程序中的事件顺序颠倒了,出于某种原因,它似乎可以在硬件电话上运行,但不能在仿真器中运行:

val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent2)
finish()

val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
startActivity(intent1)

我的问题有两个:为什么会这样,正确的方法是什么?

3 个答案:

答案 0 :(得分:2)

您不能同时启动2个意图。其中一个优先级高,另一个优先级高(我不确定哪个版本之间被忽略是一致的,所以我不会在此处发表评论)。您需要启动查询/调查,然后启动下一个意图作为响应。或通过一些其他操作来启动主屏幕,告诉它随后启动浏览器(这样,您先注销,转到主页,然后启动浏览器)。您不能直接进行两次startActivity调用。

答案 1 :(得分:1)

使用startActivities方法,该方法采用Intents数组和可选的附加项捆绑包。

答案 2 :(得分:0)

使用startActivities而不是startActivity:

val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
val intents = arrayOf<Intent>(intent2, intent1)
startActivities(intents)
finish()

将意图放在数组的最后,需要在顶部显示。