关于android launchmode"singleTask"

cn1*_*n1h 29 android launchmode android-activity

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

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

ActivityA -> ActivityB -> ActivityC
Run Code Online (Sandbox Code Playgroud)

这就是task1的样子.

然后用户点击home buttom并选择启动App2,这样task1进入后台并且android启动一个新任务:task2,用户执行的操作:

ActivityD -> ActivityE
Run Code Online (Sandbox Code Playgroud)

现在让我们说ActivityE尝试启动ActivityB,并ActivityB拥有launchmode singleTask.

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

ActivityA -> ActivityB
Run Code Online (Sandbox Code Playgroud)

意思是:

  1. ActivityC将从任务1被移除并ActivityB变得顶端活动.

  2. 如果用户现在点击"返回"按钮,他将来到ActivityAtask1而不是返回ActivityEtask2

我对吗?

谢谢

Blu*_*ell 20

你说得对.

你为什么不测试它.

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

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

在此输入图像描述

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

  • 谢谢,但令我困惑的是这个文档:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode 它说:相反,“singleTask”和“singleInstance”活动只能开始一个任务。它们始终位于活动堆栈的根部。 (2认同)
  • 演示中有一个错误。当您启动一个新的活动时,该活动的语言模式为“ singleTask”,该活动将始终在新任务中创建。但是实际上,只有在您设置*后,它才会在新任务中创建活动的* taskAffinity **。 (2认同)

Err*_*lva 9

ActivityC将从task1中删除,ActivityB将变为top活动.

是的,你是对的...

ActivityC将被删除,即将调用ActivityC的onDestroy方法.因此,当用户再次启动任务1时,将显示ActivityB而不是ActivityC.

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

如果你看一下它所说的机器人文件

"一个"singleTask"活动允许其他活动成为其任务的一部分.它始终是其任务的根源,但其他活动(必然是"标准"和"单一活动")可以启动到该任务中."

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

在示例应用程序的我给你前面,如果你只是运行项目"AndroidTest",然后单击日志中的home键,你可以看到,第二个活动放在暂停,当你从"最近的应用程序的"再次启动它列出第二个活动被销毁.

在Senario中,单个实例活动上方的Activity(ActivityB)未从Back Stack中移除,而另一个应用程序请求此Activity(ActivityB),它可能不会显示,并且可能会删除intent.但这极少发生的可能性因为用户必须先按Home键,然后按BackStack中的当前Task\App才能导航到另一个Task\App.

因此警告

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

我希望这能解决你的疑虑.