Как закончить приложение для Android? - PullRequest
31 голосов
/ 19 января 2011

Мне нужно закончить приложение для Android. Для этого я написал

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure You want to exit")
        .setCancelable(false)
        .setPositiveButton("YES"),
        new DialogInterface.OnClickListener() {
            // On
            // clicking
            // "Yes"
            // button

            public void onClick(DialogInterface dialog,int id) {
                System.out.println(" onClick ");
                closeApplication(); // Close Application method called
            }
        })
        .setNegativeButton("NO"),
        new DialogInterface.OnClickListener() {
            // On
            // clicking
            // "No"
            // button
            public void onClick(DialogInterface dialog,int id) {
                dialog.cancel();
            }
        });

        AlertDialog alert = builder.create();
        alert.show();
    }

    private void closeApplication() {
        System.out.println("closeApplication ");
        this.finish();
    }
}

Но если какое-либо действие не завершено в приложении, когда я пытался выйти из приложения, действие сначала завершается, а приложение не завершается .. Я пытался 2 раза выйти из этого приложения ... Как я могу завершить все действия в приложении, когда мне нужно выйти ... или есть ли способ завершить все приложение

Ответы [ 8 ]

48 голосов
/ 19 января 2011

Чтобы закрыть приложение, просто позвоните:

android.os.Process.killProcess(android.os.Process.myPid());

В противном случае из-за определенных циклов работы Android вы не можете быть уверены, что приложение закрыто / убито.

26 голосов
/ 19 января 2011

всякий раз, когда вы начинаете новое занятие, используйте

myintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myintent);

и в файле манифеста упомяните эту активность как

<activity android:name=".<Activity Name>" >
        <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
     <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
       </activity>
16 голосов
/ 05 февраля 2015

Положите это в onClick или onBackPressed:

moveTaskToBack(true);
finish()
11 голосов
/ 19 января 2011

Пожалуйста, прочитайте сначала это сообщение от Google Android Developer Advocate Reto Meier: Когда включать кнопку выхода в приложения для Android (Подсказка: никогда)

Какой симптом вы хотитедобавить кнопку выхода?Если вам нужно очистить стек действий и всегда перезапускать с определенным действием, возможно, вам просто нужно настроить объявление манифеста активности с помощью таких атрибутов, как: android: clearTaskOnLaunch

9 голосов
/ 19 января 2011

Android сделан таким образом, что практически НИКАКОЕ приложение, которое когда-то было открыто, закрыто.

Прежде чем неправильно интерпретировать утверждение, поймите это.

"Каждый раз, когда вы выходите из приложенияAndroid сохраняет все то, что делало приложение (называемое его состоянием), и толкает приложение в фоновом режиме, вызывая метод onStop (). Это то новое состояние приложения, когда приложение не работает, но не работает.также не выгружается из памяти. Каждый раз, когда вы снова запускаете приложение, оно восстанавливается из замороженного состояния. Только когда память, в которой хранятся замороженные приложения, начинает заполняться, Android GC сбрасывает приложение. "

Так что концептуально ничего не выходит.когда вы нажимаете кнопку «назад» во время первого действия, Android связывает приложение и данные и замораживает их.

1 голос
/ 02 августа 2016

Бесстыдная копия ответа NeTeInStEiN, поскольку я нашел его таким полезным (пожалуйста, проголосуйте за его ответ): Отправка работающего приложения в фоновый режим программно

Вы можете использовать либо:

boolean sentAppToBackground = moveTaskToBack(true);

if(!sentAppToBackground){
  Intent i = new Intent();
  i.setAction(Intent.ACTION_MAIN);
  i.addCategory(Intent.CATEGORY_HOME);
  this.startActivity(i);
}

Больше информации здесь: http://developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean)

Или просто:

Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
this.startActivity(i);

По словам Ромена Гая, инженера по Android Framework, «Вы не можете имитировать нажатие клавиши« Домой »». Так что будьте осторожны ...

Проверка: http://osdir.com/ml/Android-Developers/2010-03/msg01887.html

Обновлен этот ответ в соответствии с: moveTaskToBack (true) всегда возвращает false

1 голос
/ 10 мая 2012

У меня есть приложение с несколькими активностями. Я расширил класс приложения и включил переменную numActive. Это инициализируется до 0. В onStart () каждого действия увеличивается numActive, а в onStop () - уменьшается. Если счетчик достигает нуля, пользователь полностью покинул мое приложение, и я закрываю свои фоновые задачи.

0 голосов
/ 29 декабря 2012

Чтобы закрыть приложение, вы также можете взять «System.exit (0)» 0 или использовать любой код выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...