【问题标题】:Weird behavior when startActivityForResult a singleInstance ActivitystartActivityForResult 单个实例活动时的奇怪行为
【发布时间】:2020-11-24 17:10:23
【问题描述】:

我在一个 android 应用中创建了三个活动:MainActivitySecondActivityThirdActivity 并记录这些活动的onCreate@taskId 事件。

SecondActivity的启动模式设置为singleInstance

然后我在MainActivity中放了两个按钮。

button1 startActivity(SecondActivity).

button2 startActivityForResult(SecondActivity).

button3 startActivity(ThirdActivity).

点击button1->点击button3后,我得到了以下日志,这与我预期的一样:

MainActivity onCreat@xxx0
SecondActivity onCreate@xxx1 // second activity is expected in a new task
ThirActivity onCreate@xxx0 // third

但是,点击button2 -> 点击button3:

MainActivity onCreat@xxx0
SecondActivity onCreate@xxx0 // it seems that startActivityForResult will make singleInstance activity not work
ThirdActivity onCreate@xxx1 // Here is the weird thing, the ThirdActivity is created on a new task!

谁能解释一下?

这是用于复制的 repo singleInstanceTest

【问题讨论】:

  • Intent.FLAG_ACTIVITY_NEW_TASK 应该可以工作。
  • @Raghunandan 我在启动 SecondActivity 时添加了这个标志,没有任何改变。
  • 它应该与在新任务中启动的意图标志第二个活动一起使用
  • 看来singleInstance 不适用于startActivityForResult。我想如果你想保持当前的行为,那么从 MainActivity,只需使用 startActivity(secondActivity)。然后使用广播或 EventBus 将结果返回给 MainActivity。

标签: android kotlin


【解决方案1】:

documents

如果 Activity 的实例已经存在于单独的任务中,系统会通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建新实例。

我使用singleTask 启动模式的定义来解释该行为,因为它相同

  1. 当您点击Button 1 时,它会启动SecondActivity,当您返回时(我假设您按下或拨打finishSecondActivity 的实例会弹出BackStack

  2. 当您单击Button 2 时,SecondActivity 的实例未退出,因此System 将为SecondActivity 创建一个新实例

要了解它,您应该尝试关注MainActivity -> startActivityForResult(SecondActivity) -> 在SecondActivity 创建按钮开始ThirdActivity -> 在ThirdActivity 创建按钮并调用startActivityForResult(SecondActivity)。记录下来就明白了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多