Очистка полного стека активности Android на старых SDK (у которых отсутствует FLAG_ACTIVITY_CLEAR_TASK)

Я сделал qui немного чтения и поиска на SO, но не могу найти способ очистить текущий стек активности . Контекст моего приложения – это действие, начатое службой / уведомлением.

Представьте, что мое приложение позволяет вам упорядочить список людей. Несколько часов назад вы рассматривали человека X в действии «Просмотр», теперь это вершина вашего стека. В какой-то момент в будущем служба запускается, и я вывожу новую активность «Уведомлять» для лица Y. Оттуда вы можете отредактировать детали человека Y.

Когда вы закончите эту деятельность, это будет запутанный пользовательский опыт, чтобы вытащить стек и в конечном итоге просмотреть человека X. В идеале я хотел бы вернуться к тому, что делал пользователь (электронная почта и т. Д.), Или, по крайней мере, Дома моего приложения.

Я попытался запустить «Уведомлять» с FLAG_ACTIVTY_NEW_TASK но это, похоже, не помогает: когда задача заканчивается, она просто возвращается к предыдущей задаче . То, что я хочу, похоже, это новый FLAG_ACTIVITY_CLEAR_TASK Android 3, которого нет в предыдущих SDK.

Есть ли у кого-нибудь предложение сделать это?

Solutions Collecting From Web of "Очистка полного стека активности Android на старых SDK (у которых отсутствует FLAG_ACTIVITY_CLEAR_TASK)"

Если у вас уже есть экземпляр дома вашего приложения, работающего в стеке, при завершении работы Y вы можете начать свой дом приложения (используя startActivity() ) с флагом FLAG_ACTIVITY_CLEAR_TOP . Поскольку это уже в стеке, вместо создания нового экземпляра, это приведет вас к дому вашего приложения и очистит стек поверх него.

Просто убивай всех !

Вы можете добиться этого, используя BroadcastReceivers :

  • Создайте BaseActivity следующим образом:

 public class BaseActivity extends GuiceActivity { 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); 

Возьмите ArrayList и сохраните все объекты деятельности в arraylist в oncreate () каждого действия. Всякий раз, когда вы хотите закончить определенную деятельность, просто извлеките этот экземпляр активности из arraylist и завершите это.