Как выйти из приложения и показать домашний экран? - PullRequest
193 голосов
/ 12 июля 2010

У меня есть приложение, в котором на главной странице у меня есть кнопки для навигации по приложению.

На этой странице у меня есть кнопка «ВЫХОД», которая при нажатии приводит пользователя к главному экрану нателефон, где находится значок приложения.

Как я могу это сделать?

Ответы [ 18 ]

321 голосов
/ 12 июля 2010

Дизайн Android не поддерживает выход из приложения по выбору, а скорее управляет им в ОС. Вы можете вызвать приложение Home по соответствующему Намерению:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
72 голосов
/ 16 марта 2012

Может быть, вы можете попробовать что-то вроде этого

Предположим, в нашем приложении у нас есть ряд действий (скажем, десять), и нам нужно выйти непосредственно из этого действия.Что мы можем сделать, это создать намерение и перейти к корневому действию и установить флаг в намерении как

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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

intent.putExtra("EXIT", true);

Затем в корневой активности проверьте значение boolean и, согласно этому вызову finish (), в onCreate() корневой активности

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}
28 голосов
/ 14 мая 2012
System.exit(0);

Это, вероятно, то, что вы ищете.Он закроет все приложение и перенесет вас на главный экран.

25 голосов
/ 11 апреля 2013

Это хорошо работает для меня.
Закройте все предыдущие действия следующим образом:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();

Затем в методе MainActivity onCreate () добавьте это, чтобы завершить MainActivity

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }
23 голосов
/ 05 ноября 2012

сначала завершите ваше приложение, используя метод finish();

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

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
19 голосов
/ 12 июля 2010

Если вы хотите завершить занятие, вы можете просто позвонить finish(). Однако иметь на экране кнопку выхода - плохая практика.

16 голосов
/ 12 июля 2010

Не рекомендуется выходить из приложения Android.Смотрите этот вопрос для более подробной информации.

Пользователь всегда может выйти из приложения с помощью кнопки «Домой» или в первом действии через кнопку «Назад».

16 голосов
/ 10 апреля 2014

Некоторые действия на самом деле вы не хотите открывать снова, когда нажата кнопка «Назад», такие как «Экран заставки», «Экран приветствия», «Окно подтверждения». На самом деле вам не нужно это в стеке активности. Вы можете сделать это, используя => открыть файл manifest.xml и добавить атрибут

андроид: noHistory = "истинный"

к этим видам деятельности.

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>

ИЛИ

Иногда вы хотите закрыть все приложение при определенном нажатии кнопки назад. Здесь лучшая практика - открывать домашнее окно вместо выхода из приложения. Для этого вам нужно переопределить метод onBackPressed (). обычно этот метод открывает верхнюю активность в стеке.

@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

OR

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

@Override
public void onBackPressed() {
  finish();
}
5 голосов
/ 17 января 2014

(Я пробовал предыдущие ответы, но в некоторых пунктах их не хватает. Например, если вы не выполните return; после завершения действия, выполняется оставшийся код действия. Также вам нужно отредактировать onCreate с возвратом. запустите super.onCreate (), вы получите ошибку времени выполнения)

Скажем, у вас есть MainActivity и ChildActivity.

Внутри ChildActivity добавить это:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

Внутри MainActivity onCreate добавьте это:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}
4 голосов
/ 20 ноября 2015

Существует еще один вариант - использовать метод FinishAffinity, чтобы закрыть все задачи в стеке, связанные с приложением.

См: https://stackoverflow.com/a/27765687/1984636

...