2013-09-23 5 views
1

У меня есть особый сценарий и НЕ ЭТО, чтобы найти решение. У меня есть свой стек активности как A-> B-> C-> D. Из D, когда используются нажатия, я хочу начать операцию A и очистить стек, который я достиг с начальным действием A с флагом FLAG_ACTIVITY_CLEAR_TOP. Теперь возникает проблема: Моя активность B также может быть запущена с намерением, который могут запускаться другими приложениями. В этом случае, когда пользователь находится в действии D, и я запускаю операцию A с FLAG_ACTIVITY_CLEAR_TOP, активность D по-прежнему остается в фоновом стеке как Activity А не был в стеке. Может ли кто-нибудь указать, как справиться с этим сценарием?Лучший способ обработки Activity Stack на Android

Заранее спасибо ..

+0

активность D или активность B остается в стеке? – agamov

+1

После использования чистой вершины и начала действия use finish(); тоже .. это решит вашу проблему. –

+0

@JaiKumar Но в этом случае B и C останутся в задней части, так что не удастся решить этот – CommonMan

ответ

0

Почему не взывают активность А с FLAG_ACTIVITY_CLEAR_TOP, а затем закончить() активность D?

+0

Это то же самое, что и решение jaiKumar в комментариях. Но в этом случае B и C останутся в стопке, так что не удастся решить эту проблему – CommonMan

+0

B и C не будут в стеке, поскольку мы делаем ACTIVITY_CLEAR_TOP. Поскольку в документе говорится: «Если установлено, и запущенная деятельность уже запущена в текущей задаче, то вместо запуска нового экземпляра этой активности все остальные действия поверх нее будут закрыты, и этот намерение будет доставлен к (теперь сверху) старой деятельности как новому намерению ». – prijupaul

+0

Или вы можете использовать «FLAG_ACTIVITY_CLEAR_TASK», который очистит полный стек. – prijupaul

2

Прочти один раз, и вы никогда не будете иметь проблемы в использовании flag_activity_clear_top

Вот простое разъяснение относительно использования Flag_Activity_Clear_Top.

One Liner Формула для его правильного использования:

Он всегда очищает промежуточные деятельности (если таковая имеется) между вызывающей активностью и вызываемой деятельностью.

Вот активность потока:

активность А -> активность В -> активность С (использование флага активности ясно, сверху, чтобы перейти к D) -> активность D

В приведенной выше последовательности при достижении к D, если мы нажмем тогда мы получим активность C-> активности B-> активность A, так как нет никакой промежуточной аКТИВНОСТИ между активностью C и активность D

мифа о некоторых разработчиках здесь есть -

После достижения активность D, используя функцию флага y clear top from C, они ожидали, что при нажатии клавиши «Назад» из D выведет их за пределы приложения. Этого никогда не будет.

Flag_Activity_Clear_Top всегда всегда очищает промежуточной деятельности между двумя деятельности, если

Вы можете добиться того, что с помощью BroadcastReceivers:

  • Создать BaseActivity так:

public class BaseActivity extends Activity { 
    private KillReceiver mKillReceiver; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mKillReceiver = new KillReceiver(); 
     registerReceiver(mKillReceiver, 
      IntentFilter.create("kill", "spartan!!!")); 
    } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     unregisterReceiver(mKillReceiver); 
    } 
    private final class KillReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      finish(); 
     } 
    } 
} 

  • Сделайте свою деятельность более продолжительной, чем BaseActivity.
  • Всякий раз, когда вы хотите, чтобы очистить стек:

Intent intent = new Intent("kill"); 
intent.setType("spartan!!!"); 
sendBroadcast(intent); 

+0

Я полностью понимаю это, и именно поэтому я исправил два других плаката. Широковещательное решение - это хорошо, но я надеялся, что было бы проще очистить стек, чем это решение ... Спасибо. – CommonMan

Смежные вопросы