首页 > 解决方案 > startActivityForResult 单个实例活动时的奇怪行为

问题描述

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

的启动模式SecondActivity设置为singleInstance

然后我把两个按钮放进去MainActivity

按钮 1 startActivity(SecondActivity)

按钮 2 startActivityForResult(SecondActivity)

按钮 3 startActivity(ThirdActivity)

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

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

但是,单击按钮 2 -> 单击按钮 3:

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 。

标签: androidkotlin

解决方案


文件说_

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

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

  1. 当您单击Button 1它开始SecondActivity并返回时(我假设您按下或调用)弹出finish的实例SecondActivityBackStack

  2. 当您单击不退出的Button 2实例时,将为SecondActivitySystemSecondActivity

要了解它,您应该尝试关注MainActivity-> startActivityForResult(SecondActivity)-> 在SecondActivity开始时创建按钮ThirdActivity-> 在ThirdActivity创建按钮中并调用startActivityForResult(SecondActivity). 记录它以了解。


推荐阅读