我阅读了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

意思是:
  • 将从任务1中删除ActivityC,并且ActivityB成为顶部的Activity。
  • 如果用户现在单击“返回”按钮,他将进入task1的ActivityA,而不是返回task2的ActivityE

  • 我对吗?

    谢谢

    最佳答案

    The ActivityC will be removed from task1 and ActivityB becomes the top Activity.
    

    是的,你是对的...

    ActivityC将是来自removedonDestroy,即将调用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)不适用于大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序有很大不同。

    希望这能解决您的疑问。

    08-18 17:54