[英]About android launchmode “singleTask”
我阅读了 android developer guide 和互联网上的一些文章,我仍然对singleTask
launchmode
感到困惑。 让我们举个例子:
用户启动 App1,android 开始一个新任务。 假设 App1 按以下顺序创建活动:
ActivityA -> ActivityB -> ActivityC
这就是 task1 的样子。
然后用户单击主页按钮并选择启动 App2,因此 task1 进入后台并且 android 开始一个新任务:task2,用户执行以下操作:
ActivityD -> ActivityE
现在让我们说ActivityE
尝试启动ActivityB
,并且ActivityB
具有启动模式singleTask
。
我的理解是 task1 再次进入前端,而 task2 进入后台。 task1 现在看起来像这样:
ActivityA -> ActivityB
意思是:
ActivityC
将从 task1 中删除,而 ActivityB 将成为顶部 Activity。
如果用户现在点击“返回”按钮,他将来到 task1 的ActivityA
而不是返回到 task2 的ActivityE
我对吗?
谢谢
你听起来是对的。
你为什么不测试它。
还有这个应用程序可以帮助解释启动模式:
https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode
The ActivityC will be removed from task1 and ActivityB becomes the top Activity.
是的,你是对的...
ActivityC 将被removed
,即 ActivityC 的onDestroy
方法将被调用。 因此,当用户再次启动任务 1 时,将显示 ActivityB 而不是 ActivityC。
已经创建了 2 个任务(项目)并上传了相同的 @ SendSpace 。 试试看...
如果您查看 androids 文档,它会说
““singleTask”活动允许其他活动成为其任务的一部分。它始终位于其任务的根部,但其他活动(必须是“标准”和“单顶”活动)可以启动到该任务中。
这意味着当您单击主页按钮时,单任务活动(在您的情况下为 ActivityB)上方的所有活动都将从堆栈中删除。
在示例中,如果您只是运行项目“AndroidTest”并单击日志中的主页按钮,我之前给您的应用程序您可以看到第二个活动处于暂停状态,当您从“最近应用程序”列出了第二个活动被破坏。
在单实例活动 (ActivityB) 上方的活动未从后台堆栈中移除,并且另一个应用程序请求此活动 (ActivityB) 的情况下,它可能不会显示,并且意图可能会被删除。 但是这种情况发生的可能性极小,因为用户必须先按下 Home 按钮,然后才能导航到另一个 Task\\App 中的 BackStack 中的当前 Task\\App。
因此警告
其他模式 — singleTask 和 singleInstance — 不适用于大多数应用程序,因为它们导致用户可能不熟悉并且与大多数其他应用程序非常不同的交互模型。
我希望这能解决你的疑惑。
正确,无论何时启动 singleTask 活动,它都会在前台清除当前存在于其上方的所有活动,如果您的 singleTask 活动位于顶部,则它的行为与 singleTop 相同。
PS - onCreate 不是第二次调用,而是 onNewIntent 被调用。
检查此链接,很好地解释了启动模式。 https://medium.com/android-news/android-activity-launch-mode-e0df1aa72242
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.