我阅读了android开发人员指南和互联网上的一些文章,但我仍然对singleTask
launchmode
感到困惑。让我们举个例子:
用户启动App1,android启动新任务。假设App1按照以下顺序创建 Activity :
ActivityA -> ActivityB -> ActivityC
这就是task1的样子。
然后,用户单击主按钮并选择启动App2,因此task1在后台运行,而android启动新任务:task2,用户执行了以下操作:
ActivityD -> ActivityE
现在让我们说
ActivityE
尝试启动ActivityB
,并且ActivityB
具有启动模式singleTask
。我了解的是task1再次进入前端,而task2进入后台。现在task1看起来像这样:
ActivityA -> ActivityB
意思是:
ActivityC
,并且ActivityB成为顶部的Activity。 ActivityA
,而不是返回task2的ActivityE
我对吗?
谢谢
最佳答案
The ActivityC will be removed from task1 and ActivityB becomes the top Activity.
是的,你是对的...
ActivityC将是来自
removed
的onDestroy
,即将调用ActivityC的ojit_code方法。因此,当用户再次启动任务1时,将显示ActivityB而不是ActivityC。创建了2个任务(项目)并上传了相同的@ SendSpace。试试看...
如果你看androids documentation,它说
““singleTask” Activity 允许其他 Activity 成为其任务的一部分。它始终是其任务的根本,但是其他 Activity (必要时为“standard”和“singleTop” Activity )也可以启动到该任务中。”
这意味着当您单击主页按钮时,单任务 Activity (在您的情况下为ActivityB)上方的所有 Activity 都将从堆栈中删除。
在示例中,如果您只是运行项目“AndroidTest”并单击日志中的“主页”按钮,则该应用程序是我之前给您的,您可以看到第二个 Activity 已置于“暂停”状态,而当您再次从“最近的”启动它时应用程式”中列出第二个 Activity 被销毁。
在未从Back Stack中删除单实例 Activity (ActivityB)之上的 Activity ,并且另一个应用程序请求此 Activity (ActivityB)的情况下,可能不会显示该 Activity ,并且可能会删除该意图。但这发生的机会极少,因为用户必须先按下Home按钮,然后按下BackStack中的当前Task \ App,然后才能导航到另一个Task \ App。
因此警告
其他模式(singleTask和singleInstance)不适用于大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序有很大不同。
希望这能解决您的疑问。