Принудительный выход из приложения Android с помощью System.exit(0) не работает

когда я пытаюсь выйти из своего приложения для Android, перезаписав функцию кнопки «Назад» на устройствах Android и «System.exit (0)», это не работает.

У меня есть действие с именем «LoginActivity» и действие с именем «OverviewActivity».

Когда я запускаю намерение в ReviewActivity переключиться на LoginActivity, это работает.

Intent changeViewIntent = new Intent(OverviewActivity.this,
            LoginActivity.class);
startActivity(changeViewIntent);

Теперь я в LoginActivity и есть перезаписанный метод:

@Override
public void onBackPressed() {
    System.exit(0);
}

Но когда я нажимаю клавишу «Назад» (например, в симуляторе устройства), экран пуст на миллисекунду, а затем возвращается к обзорной активности.

Почему это происходит? Я просто хочу принудительно закрыть, когда нажата клавиша «Назад».

Отключение истории для ReviewActivity в манифесте не является вариантом, поскольку существует несколько способов получить доступ к ReviewActivity из других действий.

Может есть идея? Android 4 является минимальным требованием, поэтому он не должен работать на более ранних версиях.

Спасибо!


person Marcel Balzer    schedule 20.11.2014    source источник
comment
Релевантно: stackoverflow. ком/вопросы/2042222/   -  person Celeo    schedule 21.11.2014
comment
Также актуально   -  person Alexander Kohler    schedule 21.11.2014
comment
Спасибо, добавил ответ. Это комбинация обоих вопросов, которые сработали.   -  person Marcel Balzer    schedule 21.11.2014


Ответы (2)


Выход возможен, удалив всю историю вызовов-активностей и запустив Домашнюю-Активность Домашнего-Экрана.

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
person Marcel Balzer    schedule 20.11.2014

Что вы можете сделать, это

В вашем обзоре активности:

Intent changeViewIntent = new Intent(OverviewActivity.this,
            LoginActivity.class);
startActivity(changeViewIntent);
OverviewActivity.this.finish();

после запуска намерения вы прекращаете обзорную деятельность

и в LoginActivity

@Override
public void onBackPressed() {
    LoginActivity.this.finish();

}

Таким образом, ваше приложение выйдет.

Разница между finish() и System.exit(0)

ВМ останавливает дальнейшее выполнение, и программа завершается.

Теперь в вашем случае первое действие возвращается из-за стека действий.

Поэтому, когда вы переходите от одного действия к другому с помощью Intent, выполняйте finish() текущего действия следующим образом.

Если вы хотите принудительно выйти, вы можете использовать

        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
        getParent().finish();

Но вы не должны использовать System.exit, особенно если ваша деятельность использует другие ресурсы в фоновом режиме, например. Интернет, видео и т.д.

person Kostas Drak    schedule 20.11.2014