36

我阅读了 android 开发人员指南和互联网上的一些文章,我仍然对singleTask launchmode. 举个例子:

用户启动 App1,android 启动一个新任务。假设 App1 按以下顺序创建活动:

ActivityA -> ActivityB -> ActivityC

这就是 task1 的样子。

然后用户单击主页按钮并选择启动 App2,因此 task1 进入后台,android 启动一个新任务:task2,用户执行以下操作:

ActivityD -> ActivityE

现在让我们说ActivityE尝试启动ActivityB,并ActivityB具有启动模式singleTask

我的理解是 task1 再次进入前端,而 task2 进入后台。task1 现在看起来像这样:

ActivityA -> ActivityB

意思是:

  1. ActivityC将从 task1 中删除,ActivityB 成为顶部 Activity 。

  2. 如果用户现在单击“返回”按钮,他将返回ActivityA任务 1 而不是返回ActivityE任务 2

我对吗?

谢谢

4

3 回答 3

20

你说得对。

你为什么不测试一下。

还有这个应用程序可以帮助解释启动模式:

https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode

在此处输入图像描述

来源在https://github.com/gnorsilva/Activities-LaunchMode-demo

于 2012-07-26T12:01:50.707 回答
10
The ActivityC will be removed from task1 and ActivityB becomes the top Activity.

是的,你是对的...

ActivityC 将removed来自 即onDestroyActivityC 的方法将被调用。因此,当用户再次启动任务 1 时,将显示 ActivityB 而不是 ActivityC。

已创建 2 个任务(项目)并上传了相同的@SendSpace。试试看...

如果您查看 androids文档,它会说

““singleTask”活动允许其他活动成为其任务的一部分。它始终位于其任务的根部,但其他活动(必须是“标准”和“singleTop”活动)可以启动到该任务中。”

这意味着当您单击主页按钮时,单任务活动(在您的情况下为 ActivityB)之上的所有活动都将从堆栈中删除。

在示例中,如果您只是运行项目“AndroidTest”并单击日志中的主页按钮,您可以看到我之前为您提供的应用程序,您可以看到第二个 Activity 处于暂停状态,当您从“最近”再次启动它时应用程序”列表中的第二个 Activity 已被销毁。

在单实例活动(ActivityB)之上的 Activity 没有从 Back Stack 中移除的情况下,并且另一个应用程序请求此 Activity(ActivityB),它可能不会显示并且可能会丢弃 Intent。但这发生的机会极少,因为用户必须按下 Home 按钮,但在 BackStack 中的当前 Task\App 才能导航到另一个 Task\App。

因此警告

其他模式——singleTask 和 singleInstance——不适用于大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序非常不同。

我希望这能解决你的疑惑。

于 2012-07-26T12:15:06.193 回答
2

正确,无论何时启动 singleTask 活动,它都会在前台清除当前存在于其上方的所有活动,如果您的 singleTask 活动在顶部,它将与 singleTop 行为相同。

PS - onCreate 不是第二次调用,而是调用 onNewIntent。

检查这个链接,很好地解释了启动模式。 https://medium.com/android-news/android-activity-launch-mode-e0df1aa72242

于 2021-05-18T19:21:04.737 回答