Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Просто kill'em all!

Вы можете добиться этого, используя 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);

Ответ 3

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