В Android у меня есть некоторые действия, скажем, A, B, C.
В A я использую этот код, чтобы открыть B:
Intent intent = new Intent(this, B.class);
startActivity(intent);
В B я использую этот код, чтобы открыть C:
Intent intent = new Intent(this, C.class);
startActivity(intent);
Когда пользователь нажимает кнопку в C, я хочу вернуться к A и очистить задний стек (закрыть B и C). Поэтому, когда пользователь нажимает кнопку возврата B и C не отображаются, я пробовал следующее:
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Но B и C по-прежнему отображаются, если я использую кнопку «Назад», когда возвращаюсь к занятию A. Как я могу избежать этого?
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
источник
CLEAR_TOP
флагу - эта комбинация является единственной, которая полностью очистила весь стек и сделала новую активность единственной в приложении. Спасибо!Как насчет добавления в файл манифеста для связанной деятельности:
к определению активности B и C? Они не будут добавлены в backstack. Не уверен, что это то, что вы хотите.
источник
Это беспокоит меня долгое время. Наконец я решил это, выполнив это:
Во фрагменте используйте:
В Activity используйте (добавьте еще один флаг намерения
Intent.FLAG_ACTIVITY_CLEAR_TASK
по сравнению с фрагментом):источник
android:launchMode="singleTop"
к элементу активности в манифесте для действия Aintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
иintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
при запуске действия AЭто означает, что при запуске действия A все задачи поверх него очищаются, так что A находится наверху. Новый задний стек создается с A в корне, и использование
singleTop
гарантирует, что вы только когда-либо запускаете A один раз (так как A теперь находится на вершине из-за..._CLEAR_TOP
).источник
Начиная с API 16 (Jelly Bean), вы можете просто позвонить
finishAffinity()
.Теперь вы также можете позвонить
ActivityCompat.finishAffinity(Activity activity)
с библиотекой совместимости.Обязательно задайте для taskAffinity в манифесте имя пакета, уникальное для этой группы действий.
Для получения дополнительной информации см.
Http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29
источник
Попробуйте использовать
и нет
источник
Если ваше приложение имеет минимальную версию SDK 16, то вы можете использовать finishAffinity ()
Завершите это действие, а также все действия непосредственно под ним в текущей задаче, которые имеют ту же привязку.
Для меня это работа. На экране Top Payment удалите все бэк-стеки,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
источник
Согласно Wakka в Удаление деятельности из стека истории ...
Добавить
android:noHistory="true"
атрибут к вашему<activity>
вAndroidManifest.xml
следующим образом:источник
Для будущих исследований попробуйте этот код.
источник
Используйте finishAffinity (); в задаче C при запуске задачи A для очистки операций обратного стека.
источник
Используйте этот код для запуска новой Деятельности и закройте или уничтожьте все остальные стеки активности или обратный стек.
источник
источник
Я нашел интересное решение, которое может помочь. Я сделал это в моем
onBackPressed()
методе.FinishAffinity
удаляет подключение существующего действия к его стеку. А потом финиш поможет вам выйти из этого занятия. Который в итоге выйдет из приложения.источник
Я нашел ответы здесь немного вводящими в заблуждение, потому что код в исходном вопросе, кажется, хорошо работает для меня?
Поскольку A является корневым действием, запуск его с B или C только с FLAG_ACTIVITY_CLEAR_TOP приводит к удалению B и C из заднего стека.
источник
В котлине это почти так же, как в Java. Только | символ заменяется на или текст. Итак, это написано как
источник
Я перепробовал все решения, и ни одно из них не работало для меня индивидуально. Мое решение:
Объявить
Activity A
какSingleTop
с помощью[android:launchMode="singleTop"]
в манифесте Android.Теперь добавьте следующие флаги при запуске
A
из любого места. Это очистит стек.источник
Intent.FLAG_ACTIVITY_CLEAR_TOP
не будет работать в этом случае. Пожалуйста, используйте(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
Для более подробной информации, пожалуйста, ознакомьтесь с этой документацией.
источник
Это звучит для меня, как будто вы должны начать
Activity C
сActivity B
использованияstartActivityForResult()
. Когда вы нажимаете кнопкуActivity C
, вызовsetResult(RESULT_OK)
иfinish()
такActivity C
заканчивается. ВActivity B
, вы могли бы получитьonActivityResult()
ответ, также позвонивfinish()
самому себе, и тогда вас вернут обратноActivity A
.источник
logout.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK); logout.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
источник
Вы можете использовать этот пример , чтобы позвонить в вашем
Activity A
изActivity C
Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);
источник
для меня добавление
Intent.FLAG_ACTIVITY_CLEAR_TASK
решило проблемуисточник
Продвинутый, многоразовый Kotlin:
Вы можете установить флаг напрямую, используя метод установки. В Kotlin
or
есть замена для битовой Java или|
.Если вы используете это более одного раза, создайте функцию расширения Intent
Затем вы можете напрямую вызвать эту функцию перед началом
Если вам нужна опция добавления дополнительных флагов в других ситуациях, добавьте необязательный параметр в функцию расширения.
источник
Кроме того
FLAG_ACTIVITY_CLEAR_TOP
, вы можете попробовать добавитьIntent.FLAG_ACTIVITY_SINGLE_TOP
:intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
источник
Данный код работает правильно. Я пробовал в образце жизненного цикла приложения.
У меня нет B и C в заднем стеке после начала действия A с флагом FLAG_ACTIVITY_CLEAR_TOP
источник
я позвонил
activity_name.this.finish()
после начала нового намерения, и это сработало для меня.Но он не будет работать для меня ... Я не предлагаю это решение для использования, но если установка флага не будет работать для вас, чем вы можете попробовать это ... Но все же я рекомендую не использовать его
источник
Добавьте NO Флаг Истории в намерении.
В упражнении B запустите упражнение C, как показано ниже >>>>>>
источник
В манифесте
и
источник
Либо добавьте это к вашему
Activity B
иActivity C
или
Override
onBackPressed
функция, чтобы избежать обратного нажатия сreturn
.источник
Используйте метод setFlags (), чтобы очистить заднюю сторону, открыть все действия, закрыть и запустить yourActvity.
источник