Как очистить трассировку стека событий на заднем пресс-мероприятии?

Я создал приложение с несколькими страницами и переходом от одного к другому представляет собой важный поток. Я не хочу, чтобы пользователь мог нажать кнопку "Назад" и избежать активности без предварительного предупреждения, а затем, наконец, удалить всю трассировку стека, чтобы при повторном запуске активности она начиналась заново.

На данный момент я использовал что-то похожее на функцию ниже:

@Override
 public void onBackPressed() 
 {
 this.finish(); 
 Intent int1= new Intent(this, Home.class);
 int1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
 startActivity(int1);
 super.onBackPressed();
 }

Но иногда, когда после выхода из приложения при его запуске он перезапускается с какой-то случайной страницы или с той, где я выхожу из приложения (в основном не на главном экране, откуда он должен запускаться)

Я не могу придумать более простой способ выйти из приложения, кроме как очистить все предыдущие флаги активности, как описано в коде. Любая помощь по вышесказанному ценится!

ИЗМЕНИТЬ:

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

3 ответа

Вам не нужен какой-либо из этого настраиваемого кода в onBackPressed(). Все, что вам нужно сделать, это добавить все ваши определения в манифест (кроме корневой активности):

android:noHistory="true"

Это гарантирует, что ни одна из ваших действий (ожидание корневой активности) не будет записана в задний стек. Когда пользователь нажимает кнопку BACK, он просто вернется к корневой активности.

Другим преимуществом этого является то, что если пользователь покидает ваше приложение (нажав кнопку "ДОМОЙ" или, потянув панель уведомлений и нажав на уведомление, когда он вернется в ваше приложение, он также вернется к вашему корневому действию.


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

Это можно сделать, просто закончив все действия по мере их продвижения вперед, кроме MainActivity.

Таким образом, если кто-то переделает приложение, он снова начнет обычно с главной страницы.

Похоже, если пользователь находится в Activity_5 и использует главную кнопку и снова запускает приложение, должна появиться MainActicity?

ЕСЛИ так, вы можете называть finish() в onPause() для каждой операции, кроме MainActivity

EDIT:

Не может быть идеальным решением, но это то, что я сделал для достижения того же (выход из моего приложения):

OnBackPressed() в любой активности обновляет boolean общую привилегию: backPressed до true и onResume() всех действий, кроме MainActivity, чтобы проверить его значение и закончить, если true.

@Override
protected void onResume() {
 super.onResume();
 SharedPreferences mSP = getSharedPreferences(
 "your_preferences", 0);
 if (mSP .getBoolean("backPressed", false)) {
 finish();
 }
}


Кнопка "Назад" используется для возврата к предыдущему действию. Поэтому я бы не переопределил кнопку "Назад", чтобы очистить стек активности. Я предлагаю вам использовать панель действий для этой цели. Перейдите на главный экран приложения, используя значок приложения.

http://developer.android.com/guide/topics/ui/actionbar.html

Также проверьте эту ссылку и комментарии ниже ответа warrenfaith

android - onBackPressed() не работает для меня

licensed under cc by-sa 3.0 with attribution.