我读了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. ActivityC 将从task1中删除,ActivityB变为顶部Activity。

  2. 如果用户现在点击"返回"按钮,他会来 ActivityA 任务1而不是返回 ActivityE 任务2

我说得对吗?

谢谢

有帮助吗?

解决方案

ActivityC将从task1中删除,ActivityB变为顶部Activity。

是的,你是对的。..

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

已经创建了2个任务(项目)并上传了相同的 @ 发送空间.试试吧。..

如果你看机器人 文件编制 上面写着

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

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

在示例应用程序中,我之前给过你,如果你只是运行项目"AndroidTest"并单击日志中的主页按钮,你可以看到第二个活动被暂停,当你从"最近的应用程序"列表中再次启动它时,第二个活动被销毁。

在senario中,活动高于单个实例activites(ActivityB)不会从后台堆栈中删除,并且另一个应用程序请求此活动(ActivityB)可能不会显示它,并且意图可能会被删除。但是这是非常少的机会发生,因为用户将不得不按下主页按钮,但是在他可以导航到另一个任务应用程序之前,BackStack中的当前任务\应用程序。

因此警告

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

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

其他提示

你听起来不错。

你为什么不测试一下。

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

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

enter image description here

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top