【问题标题】:Could an activity with single task flag be cleared via clear top?可以通过清除顶部清除具有单个任务标志的活动吗?
【发布时间】:2015-02-02 12:41:26
【问题描述】:

假设我有一个具有单任务启动模式的启动器活动 A。现在想象 A 像这样启动 Activity B;

        Intent intent = new Intent(this, B.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
            | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivityForResult(intent, REQ_ACCOUNT_ACTIVITY);

在这种情况下,A 似乎没有被破坏。我想知道这是对的还是我做错了什么?

【问题讨论】:

  • 不要同时使用 CLEAR_TOP 和 SINGLE_TOP。
  • 您好。我实际上想知道这种行为是否可以。我的意思是毕竟 A 是根活动和任务所有者的类别。尝试以我上面的方式从 B 中清除它并不会破坏 A。这可能是应用程序的正确态度,但我需要对此进行验证。 (就像指向这个问题的官方文件的参考)

标签: android start-activity launchmode


【解决方案1】:

您可以通过在AndroidMenifest 文件中使用以下属性来实现此目的

android:finishOnTaskLaunch="true"

 <application
   ...
   >
    <activity
        android:finishOnTaskLaunch="true"
        android:launchMode="singleTask" 
        ...>
    </activity>
</application>

如果您不想在历史堆栈中保留新活动。使用以下一个_

FLAG_ACTIVITY_NO_HISTORY

//Actvity B is not in BackStack if we set FLAG_ACTIVITY_NO_HISTORY flag
 Intent intent = new Intent(this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivityForResult(intent, REQ_ACCOUNT_ACTIVITY);

一旦用户离开活动 B,活动就完成了。这也可以使用noHistory 属性进行设置。

更多 -> Tasks and Back Stack

【讨论】:

  • 嗨。感谢您的回答,但我实际上是在询问是否可以通过 CLEAR_TOP 标志销毁 singleTask 活动。假设堆栈从下到下有 A、B、C 活动。 A 是 singleTask 活动。现在假设 C 在某个地方启动了活动 A,并且 A 被带到前台,堆栈变成了 B、C、A。这就是我想指出的 - 现在 A 以 CLEAR_TOP 启动 B,这应该破坏 A 和 C 活动。但据我所知,A(我的 singleTask 活动)没有被破坏。有意义吗?
【解决方案2】:

已经有一段时间了,但是当我在这里闲逛时遇到了自己的问题。

活动 A 没有被删除,因为为活动 B 设置了标志。当我调用此代码时,任务堆栈中已经没有名为 B 的此类活动。如此有效,在 B 之上没有什么可清除的。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多