我在互联网上阅读了android开发者指南和一些文章,我仍然对singleTask
launchmode
感到困惑。让我们举一个例子:
用户启动App1,android启动一项新任务。假设App1按以下顺序创建活动:
ActivityA -> ActivityB -> ActivityC
这就是task1的样子。
然后用户单击home buttom并选择启动App2,因此task1进入后台并且android启动一个新任务:task2,用户执行某些操作:
ActivityD -> ActivityE
现在让我们说ActivityE
尝试启动ActivityB
,ActivityB
拥有启动模式singleTask
。
据我所知,task1再次来到前端,task2转到后台。而task1现在看起来像这样:
ActivityA -> ActivityB
这意味着:
{1}}将从task1中删除,ActivityB将变为top活动。
如果用户现在点击“返回”按钮,他将来到task1的ActivityC
而不是返回任务2的ActivityA
我是对的吗?
由于
答案 0 :(得分:20)
你说得对。
你为什么不测试它。
此应用程序还可以帮助解释启动模式:
https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode
答案 1 :(得分:8)
ActivityC将从task1中删除,ActivityB将变为top活动。
是的,你是对的...
ActivityC将被删除,即将调用ActivityC的onDestroy方法。因此,当用户再次启动任务1时,将显示ActivityB而不是ActivityC。
创建了2个任务(项目)并上传了相同的@ SendSpace。尝试一下......
如果你看一下机器人documentation就说
“一个”singleTask“活动允许其他活动成为其任务的一部分。它始终是其任务的根源,但其他活动(必然是”标准“和”单一活动“)可以启动到任务“。
这意味着当您单击主页按钮时,单个任务活动(在您的情况下为ActivityB)上方的所有活动都将从堆栈中删除。
在我之前给你的示例应用程序中,如果您只运行项目“AndroidTest”并单击日志中的主页按钮,您可以看到第二个活动处于暂停状态,并且当您再次从“最近的应用程序“列出第二个活动被破坏。
在Senario中,单个实例活动上方的Activity(ActivityB)未从Back Stack中删除,而另一个应用程序请求此Activity(ActivityB),它可能不会显示,并且意图可能被删除。但这极少发生的可能性因为用户必须先按Home键,然后按BackStack中的当前Task \ App才能导航到另一个Task \ App。
因此警告
其他模式 - singleTask和singleInstance - 不适合大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序非常不同。强> 的
我希望这能解决你的疑虑。
答案 2 :(得分:1)
正确,每当启动 singleTask Activity 时,它都会将当前存在于其上方的所有 Activity 置于前台,如果您的 singleTask Activity 位于顶部,则它的行为与 singleTop 相同。
P.S - 不会第二次调用 onCreate,而是调用 onNewIntent。
检查这个链接,很好地解释了启动模式。 https://medium.com/android-news/android-activity-launch-mode-e0df1aa72242