2014-02-03 2 views
1

Я имею три модуля - ModuleA, ModuleB, ModuleCAndroid: сродства Task & Clear задача

ModuleA - 1 activity 

MainActivity - нет сродства задачи

Module B - 3 activities 

Activity_A задачи сродства = «com.performance. poc.main "

Активность_B task affinity =" com.performance.poc.main "

Activity_C задача сродства = "com.performance.poc.main"

Module C - 1 activity 

Activity_D - не задача сродства

Navigation Case 1: 
  1. MainActivity
  2. на БТН Click - начать Activity_A Intent. FLAG_ACTIVITY_NEW_TASK
  3. on btn Click-start Activity_B
  4. on btn Click-start Activity_C
  5. on btn Click-start 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

    Ожидаемое: при запуске задачи com.performance.poc.main Activity_D должна быть очищена. Актуально: Still Activity_A, Activity_B, Activity_C остается, но MainActivity очищается.


Navigation Case 2: 
  1. MainActivity
  2. на БТН Click - начать Activity_A Intent.FLAG_ACTIVITY_NEW_TASK
  3. на БТН Click - начать Activity_B
  4. на БТН Click - начать Activity_C Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK
  5. on btn Click-start Activity_D Intent.FLAG_ACTIVITY_NEW_TASK

Ожидаемые задачи Результат:

Задача com.performance.poc
Activity_D
MainActivity

задачи com.performance.poc.main

Activity_C
Activity_B
Activity_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 должен очистить существующую задачу активности , из которой вызывается startActivity с намерением new_task и clear_task. или он очистит задачу целевой активности.

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

Каково имя пакета в вашем манифесте? –

+0

package = "com.performance.poc" – sowmia

+0

И когда вы говорите «нет привязанности к задаче» (например, в «MainActivity»), вы подразумеваете, что в теге '' не существует 'android: taskAffinity', правильно? –

ответ

3

Установка 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 и отделку, которая завершит задачу.

+0

Спасибо, Дэвид. есть ли какой-либо флаг намерения, которым я могу его достичь? Поскольку у меня есть пользовательский класс (контроллер навигации), который контролирует все действия по навигации и очистке на основе файла config.xml, размещенного в приложении. – sowmia

+1

Извините, нет. Не существует флага «Intent», который вы можете установить, чтобы очистить текущую задачу, если вы запускаете «Активность» в другую задачу. Для этого вам понадобится «делегирование» или «прокси», как я описал. Также обратите внимание, что 'Intent.FLAG_ACTIVITY_CLEAR_TASK' доступен только на Android 3.0 и выше, поэтому ваше приложение не будет работать на Android 2.2/2.3 (по-прежнему составляет более 20% установленной базы устройств) –

+0

Я собираюсь использовать библиотеку поддержки для Intent.FLAG_ACTIVITY_CLEAR_TASK.

Намерение i = новое намерение (это, Activity_C.class); ComponentName cn = i.getComponent(); Intent mainIntent = IntentCompat.makeRestartActivityTask (cn); startActivity (mainIntent); – sowmia