Android:任务亲和力&清除任务

时间:2014-02-03 13:21:23

标签: android android-navigation android-intent

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

ModuleA - 1 activity

MainActivity - 无任务关联

Module B - 3 activities 

Activity_A task affinity =“com.performance.poc.main”

Activity_B task affinity =“com.performance.poc.main”

Activity_C task affinity =“com.performance.poc.main”

Module C - 1 activity 

Activity_D - 无任务关联

Navigation Case 1:
  1. MainActivity
  2. on btn点击 - 开始Activity_A Intent.FLAG_ACTIVITY_NEW_TASK
  3. on btn点击 - 启动Activity_B
  4. on btn点击 - 启动Activity_C
  5. 在btn上单击 - 启动Activity_D Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK

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

     活动_
     MainActivity

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

    预期:在启动Activity_D任务时,应清除com.performance.poc.main。 实际:仍然活动_A,活动_B,活动_C仍然存在但MainActivity已清除。


  6. Navigation Case 2:
    
    1. MainActivity
    2. on btn点击 - 开始Activity_A Intent.FLAG_ACTIVITY_NEW_TASK
    3. on btn点击 - 启动Activity_B
    4. on btn点击 - 开始Activity_C Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK
    5. on btn点击 - 开始Activity_D Intent.FLAG_ACTIVITY_NEW_TASK
    6. 预期任务结果:

      任务com.performance.poc
      活动_
      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.
      

      我的问题就是为什么在Case1中,即使Activity_A,Activity_B,Activity_C在同一个任务中,也没有清除它们并清除MainActivity。

      Clear_Task应该清除活动的现有任务,使用intent new_task和clear_task来调用startActivity。或者它将清除目标活动的任务。

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

1 个答案:

答案 0 :(得分: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();

此简单活动应与taskAffinity具有相同的ActivityA, 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并完成,这将完成任务。