1

我有三个模块 - ModuleA、ModuleB、ModuleC

ModuleA - 1 activity

MainActivity - 没有任务亲和性

Module B - 3 activities 

Activity_A 任务亲和性 = "com.performance.poc.main"

Activity_B 任务亲和性 = "com.performance.poc.main"

Activity_C 任务亲和性 = "com.performance.poc.main"

Module C - 1 activity 

Activity_D - 没有任务亲和性

Navigation Case 1:
  1. 主要活动
  2. 在 btn 单击 - 启动 Activity_A Intent.FLAG_ACTIVITY_NEW_TASK
  3. 在 btn 单击 - 启动 Activity_B
  4. 在 btn 单击 - 启动 Activity_C
  5. 在 btn 单击 - 启动 Activity_D Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK

    预期的任务结果:
    任务 com.performance.poc

    Activity_D
    MainActivity

    任务 com.performance.poc.main
    Activity_C
    Activity_B
    Activity_A

    预期:在启动 Activity_D 任务时 com.performance.poc.main 应该被清除。实际:仍然 Activity_A、Activity_B、Activity_C 仍然存在,但 MainActivity 已清除。


Navigation Case 2:
  1. 主要活动
  2. 在 btn 单击 - 启动 Activity_A Intent.FLAG_ACTIVITY_NEW_TASK
  3. 在 btn 单击 - 启动 Activity_B
  4. 在 btn 单击 - 启动 Activity_C Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK
  5. 在 btn 单击 - 启动 Activity_D Intent.FLAG_ACTIVITY_NEW_TASK

预期任务结果:

任务 com.performance.poc
Activity_D
MainActivity

任务 com.performance.poc.main

活动 _C 活动_B
活动
_A

 Expected : on starting the Activity_C, in task com.performance.poc.main, Activity_A, Activity_B should be cleared. 
Actual :  Activity_A, Activity_B is cleared as expected.

我的问题是为什么在案例 1 中,即使 Activity_A、Activity_B、Activity_C 处于同一任务中,并且它没有清除这些并清除 MainActivity。

Clear_Task 应该清除使用意图 new_task 和 clear_task 调用 startActivity 的 Activity 的现有任务。 否则它将清除目标活动的任务。

If it is Target activity, I need to clear the task of the leaving activity, is there any way to do it?
4

1 回答 1

4

设置Intent.FLAG_ACTIVITY_CLEAR_TASK将清除目标任务

你说你需要清除当前任务。您可以通过使用中间件来做到这一点Activity。只需创建一个简单Activity的执行以下操作onCreate()

Intent = new Intent(this, ActivityD.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();

这个简单的 Activity 应该taskAffinityActivityA, B and C.

ActivityC想要开始时ActivityD,它应该像这样开始这个活动:

Intent = new Intent(this, SimpleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

这将清除当前任务,然后SimpleActivity将启动ActivityD并完成,这将完成任务。

于 2014-02-03T13:42:17.210 回答