关于android launchmode“singleTask”

时间:2012-07-26 11:19:05

标签: android android-activity launchmode

我在互联网上阅读了android开发者指南和一些文章,我仍然对singleTask launchmode感到困惑。让我们举一个例子:

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

ActivityA -> ActivityB -> ActivityC

这就是task1的样子。

然后用户单击home buttom并选择启动App2,因此task1进入后台并且android启动一个新任务:task2,用户执行某些操作:

ActivityD -> ActivityE

现在让我们说ActivityE尝试启动ActivityBActivityB拥有启动模式singleTask

据我所知,task1再次来到前端,task2转到后台。而task1现在看起来像这样:

ActivityA -> ActivityB

这意味着:

  1. {1}}将从task1中删除,ActivityB将变为top活动。

  2. 如果用户现在点击“返回”按钮,他将来到task1的ActivityC而不是返回任务2的ActivityA

  3. 我是对的吗?

    由于

3 个答案:

答案 0 :(得分:20)

你说得对。

你为什么不测试它。

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

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

enter image description here

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

答案 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