Как очистить стек Android деятельности?
у меня есть приложение с несколькими действиями в Android, и я хочу, чтобы пользователь мог выйти из системы, нажав кнопку меню. Проблема в том, что
A) Android не позволяет завершить работу приложения и
B) даже когда я отправляю пользователя в LoginActivity
снова они всегда могут нажать назад и вернуться к предыдущей деятельности, в которой они были.
Я уже пытался запустить действие с двумя следующими флагами:
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Я также пробовал с каждым из них самостоятельно.
Я также пытался позвонить finish()
после startActivity(intent)
как я читал в другом сайте StackOverflow
вопрос.
10 ответов
в вашей активности входа в систему переопределите кнопку "назад", чтобы она скрывала ваше приложение вместо завершения действия:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
также не забудьте установить android: alwaysRetainTaskState="true" в корневой активности, поэтому Android не очищает ваш стек (включая активность входа) после 30 минут бездействия от пользователя.
затем просто вызовите finish (), когда есть успешный вход в систему.
Это должно быть побитовым или вы в конечном итоге перезаписываете более ранний флаг.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
вот так:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
по состоянию на Вакка на удаление действия из стека истории...
добавить android:noHistory="true"
атрибут <activity>
на AndroidManifest.xml
такой:
<activity android:name=".MyActivity"
android:noHistory="true">
</activity>
Если вы используете Android API 11
или выше, вы можете использовать следующий код, чтобы очистить стек.
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
это не очистит ваш стек активности.
даже после выполнения всего вышеизложенного ответа, когда я нажал кнопку "назад", он показал последнее действие за секунду до закрытия приложения.
вот что я сделал:
@Override
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
теперь мое приложение выходит на задний пресс :) без каких-либо хлопот.
задание Intent.FLAG_ACTIVITY_CLEAR_TOP
работал для меня в очень похожем случае, когда я не установил Intent.FLAG_ACTIVITY_NEW_TASK
флаг. Вы пробовали без него?
эта работа для меня :)
Intent main = new Intent(this, A_Activity.class);
main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(main);
Intent tool = new Intent(this, B_Activity.class);
startActivity(tool);
finish();
где A-моя корневая активность, например
У меня есть действия A - > B - > C - > D Когда я вызываю start activity E в стеке, у меня теперь есть A - > E
Я не знаю, хорошо ли это:) но работает.
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
напишите это и обратите внимание:LoginActivity
должен быть запущен сначала как Launcher и
Если вы пишете какие-либо режимы запуска, флаги перезаписываются, поэтому удалите launchermode
и попробуйте, вы обязательно получите его
попробуй такое
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Если мы используем этот код для запуска действия входа (A):
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
действие должно быть в стеке действий, иначе эти флаги не будут иметь никакого эффекта.
Если мы используем finish () в действии входа в систему (A), после запуска действия (B) (чтобы избежать возврата к A из B), действие A (вход в систему) не будет в стеке. Точно так же происходит, когда действие входа в систему имеет атрибут "noHistory".
Итак, решение для меня было смесью другие ответы:
этот код входит в действие B, чтобы избежать возврата к активности входа:
@Override
public void onBackPressed() {
moveTaskToBack(true);
super.onBackPressed();
}
и этот код входит в действие, которое вызывает функцию выхода из системы:
public static void logout() {
Intent intent = new Intent(activity, LoginMain.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}