Как закрыть приложение Android?

157

Я хочу закрыть свое приложение, чтобы оно больше не работало в фоновом режиме.

Как это сделать? Это хорошая практика на платформе Android?

Если я полагаюсь на кнопку «назад», приложение закрывается, но остается в фоновом режиме. Есть даже приложение под названием «TaskKiller», чтобы убить эти приложения в фоновом режиме.

Danail
источник
4
Этот вопрос уже задавался. Посмотрите на stackoverflow.com/questions/2033914/… или stackoverflow.com/questions/2042222/android-close-application
Дейв Уэбб
интересно, почему бы не захотеть, чтобы его приложение работало даже в фоновом режиме?
Дарпан

Ответы:

139

Android имеет механизм для безопасного закрытия приложения в соответствии с его документацией. В последнем действии, которое было завершено (обычно это основное действие, которое впервые возникло при запуске приложения), просто поместите пару строк в метод onDestroy (). Вызов System.runFinalizersOnExit (true) гарантирует, что все объекты будут завершены и сборщик мусора при выходе из приложения. Вы также можете быстро убить приложение с помощью android.os.Process.killProcess (android.os.Process.myPid ()), если хотите. Лучший способ сделать это - поместить метод, подобный следующему, в вспомогательный класс, а затем вызывать его всякий раз, когда необходимо убить приложение. Например, в методе уничтожения корневого действия (при условии, что приложение никогда не убивает это действие):

Также Android не будет уведомлять приложение о событии клавиши HOME , поэтому вы не можете закрыть приложение, когда нажата клавиша HOME . Android резервирует ключевое событие HOME для себя, чтобы разработчик не мог запретить пользователям выходить из приложения. Однако вы можете определить, нажата ли клавиша HOME , установив флаг в true во вспомогательном классе, который предполагает, что клавиша HOME была нажата, затем изменив флаг на false, когда происходит событие, показывающее, что клавиша HOME не была нажата, а затем проверка, чтобы увидеть нажатие клавиши HOME в методе onStop () действия.

Не забывайте обращаться с клавишей HOME для любых меню и действий, запускаемых меню. То же самое касается ключа поиска . Ниже приведены примеры классов для иллюстрации:

Вот пример корневого действия, которое убивает приложение, когда оно уничтожается:

package android.example;

/**
 * @author Danny Remington - MacroSolve
 */

public class HomeKey extends CustomActivity {

    public void onDestroy() {
        super.onDestroy();

        /*
         * Kill application when the root activity is killed.
         */
        UIHelper.killApp(true);
    }

}

Вот абстрактное действие, которое можно расширить для обработки ключа HOME для всех действий, которые его расширяют:

package android.example;

/**
 * @author Danny Remington - MacroSolve
 */

import android.app.Activity;
import android.view.Menu;
import android.view.MenuInflater;

/**
 * Activity that includes custom behavior shared across the application. For
 * example, bringing up a menu with the settings icon when the menu button is
 * pressed by the user and then starting the settings activity when the user
 * clicks on the settings icon.
 */
public abstract class CustomActivity extends Activity {
    public void onStart() {
        super.onStart();

        /*
         * Check if the app was just launched. If the app was just launched then
         * assume that the HOME key will be pressed next unless a navigation
         * event by the user or the app occurs. Otherwise the user or the app
         * navigated to this activity so the HOME key was not pressed.
         */

        UIHelper.checkJustLaunced();
    }

    public void finish() {
        /*
         * This can only invoked by the user or the app finishing the activity
         * by navigating from the activity so the HOME key was not pressed.
         */
        UIHelper.homeKeyPressed = false;
        super.finish();
    }

    public void onStop() {
        super.onStop();

        /*
         * Check if the HOME key was pressed. If the HOME key was pressed then
         * the app will be killed. Otherwise the user or the app is navigating
         * away from this activity so assume that the HOME key will be pressed
         * next unless a navigation event by the user or the app occurs.
         */
        UIHelper.checkHomeKeyPressed(true);
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.settings_menu, menu);

        /*
         * Assume that the HOME key will be pressed next unless a navigation
         * event by the user or the app occurs.
         */
        UIHelper.homeKeyPressed = true;

        return true;
    }

    public boolean onSearchRequested() {
        /*
         * Disable the SEARCH key.
         */
        return false;
    }
}

Вот пример экрана меню, который обрабатывает клавишу HOME :

/**
 * @author Danny Remington - MacroSolve
 */

package android.example;

import android.os.Bundle;
import android.preference.PreferenceActivity;

/**
 * PreferenceActivity for the settings screen.
 * 
 * @see PreferenceActivity
 * 
 */
public class SettingsScreen extends PreferenceActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.layout.settings_screen);
    }

    public void onStart() {
        super.onStart();

        /*
         * This can only invoked by the user or the app starting the activity by
         * navigating to the activity so the HOME key was not pressed.
         */
        UIHelper.homeKeyPressed = false;
    }

    public void finish() {
        /*
         * This can only invoked by the user or the app finishing the activity
         * by navigating from the activity so the HOME key was not pressed.
         */
        UIHelper.homeKeyPressed = false;
        super.finish();
    }

    public void onStop() {
        super.onStop();

        /*
         * Check if the HOME key was pressed. If the HOME key was pressed then
         * the app will be killed either safely or quickly. Otherwise the user
         * or the app is navigating away from the activity so assume that the
         * HOME key will be pressed next unless a navigation event by the user
         * or the app occurs.
         */
        UIHelper.checkHomeKeyPressed(true);
    }

    public boolean onSearchRequested() {
        /*
         * Disable the SEARCH key.
         */
        return false;
    }

}

Вот пример вспомогательного класса, который обрабатывает ключ HOME в приложении:

package android.example;

/**
 * @author Danny Remington - MacroSolve
 *
 */

/**
 * Helper class to help handling of UI.
 */
public class UIHelper {
    public static boolean homeKeyPressed;
    private static boolean justLaunched = true;

    /**
     * Check if the app was just launched. If the app was just launched then
     * assume that the HOME key will be pressed next unless a navigation event
     * by the user or the app occurs. Otherwise the user or the app navigated to
     * the activity so the HOME key was not pressed.
     */
    public static void checkJustLaunced() {
        if (justLaunched) {
            homeKeyPressed = true;
            justLaunched = false;
        } else {
            homeKeyPressed = false;
        }
    }

    /**
     * Check if the HOME key was pressed. If the HOME key was pressed then the
     * app will be killed either safely or quickly. Otherwise the user or the
     * app is navigating away from the activity so assume that the HOME key will
     * be pressed next unless a navigation event by the user or the app occurs.
     * 
     * @param killSafely
     *            Primitive boolean which indicates whether the app should be
     *            killed safely or quickly when the HOME key is pressed.
     * 
     * @see {@link UIHelper.killApp}
     */
    public static void checkHomeKeyPressed(boolean killSafely) {
        if (homeKeyPressed) {
            killApp(true);
        } else {
            homeKeyPressed = true;
        }
    }

    /**
     * Kill the app either safely or quickly. The app is killed safely by
     * killing the virtual machine that the app runs in after finalizing all
     * {@link Object}s created by the app. The app is killed quickly by abruptly
     * killing the process that the virtual machine that runs the app runs in
     * without finalizing all {@link Object}s created by the app. Whether the
     * app is killed safely or quickly the app will be completely created as a
     * new app in a new virtual machine running in a new process if the user
     * starts the app again.
     * 
     * <P>
     * <B>NOTE:</B> The app will not be killed until all of its threads have
     * closed if it is killed safely.
     * </P>
     * 
     * <P>
     * <B>NOTE:</B> All threads running under the process will be abruptly
     * killed when the app is killed quickly. This can lead to various issues
     * related to threading. For example, if one of those threads was making
     * multiple related changes to the database, then it may have committed some
     * of those changes but not all of those changes when it was abruptly
     * killed.
     * </P>
     * 
     * @param killSafely
     *            Primitive boolean which indicates whether the app should be
     *            killed safely or quickly. If true then the app will be killed
     *            safely. Otherwise it will be killed quickly.
     */
    public static void killApp(boolean killSafely) {
        if (killSafely) {
            /*
             * Notify the system to finalize and collect all objects of the app
             * on exit so that the virtual machine running the app can be killed
             * by the system without causing issues. NOTE: If this is set to
             * true then the virtual machine will not be killed until all of its
             * threads have closed.
             */
            System.runFinalizersOnExit(true);

            /*
             * Force the system to close the app down completely instead of
             * retaining it in the background. The virtual machine that runs the
             * app will be killed. The app will be completely created as a new
             * app in a new virtual machine running in a new process if the user
             * starts the app again.
             */
            System.exit(0);
        } else {
            /*
             * Alternatively the process that runs the virtual machine could be
             * abruptly killed. This is the quickest way to remove the app from
             * the device but it could cause problems since resources will not
             * be finalized first. For example, all threads running under the
             * process will be abruptly killed when the process is abruptly
             * killed. If one of those threads was making multiple related
             * changes to the database, then it may have committed some of those
             * changes but not all of those changes when it was abruptly killed.
             */
            android.os.Process.killProcess(android.os.Process.myPid());
        }

    }
}
Дэнни Ремингтон - OMS
источник
1
Это должно убить все приложение, которое вызвало System.exit (0), включая все действия, которые выполняются как часть приложения. Все остальные приложения будут продолжать работать. Если вы хотите убить только одно действие в приложении, но не все действия в приложении, вам нужно вызвать метод finish () действия, которое вы хотите убить.
Дэнни Ремингтон - OMS
2
Большое спасибо за это НФО. Я делаю игру с AndEngine, и когда я вызову финиш, даже на всех действиях, android все равно не будет полностью очищен, и когда игра будет перезапущена, она будет полностью выведена из строя, все мои GL-текстуры были сбиты и т.д. Итак, после расследования, подумав, что это AndEngine, я понял, что это должно быть что-то, что пошло не так, потому что android пытался сохранить процесс, когда я хотел выйти из него. Все комментарии «о, вы не должны называть выход, это разрушает пользовательский опыт» - это нонсенс. Погода приложение должно оставаться открытым .......
17
Никакое производственное приложение не должно использовать этот код. Никакое производственное приложение не должно вызывать какой-либо код, показанный в killApp(), так как Google указал, что это приведет к непредсказуемому поведению.
CommonsWare
1
System.runFinalizersOnExit (истина); метод устарел. Как еще можно безопасно закрыть приложение (сборщик мусора)?
Аджиш
1
Это не было осуждено в то время, когда это было первоначально отправлено. Поскольку текущему AP тогда было 7, а текущему API сейчас 19, вероятно, есть другой способ сделать это сейчас.
Дэнни Ремингтон - OMS
68

ДА! Вы наверняка можете закрыть свое приложение, чтобы оно больше не работало в фоновом режиме. Как и другие, прокомментировал finish()рекомендованный Google способ, который не означает, что ваша программа закрыта.

System.exit(0);

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

Лично я НЕНАВИЖУ, когда я выбираю «Выход» в приложении, и оно действительно не завершается.

Кэмерон МакБрайд
источник
44
Использование System.exit () абсолютно не рекомендуется.
CommonsWare
14
Я не буду спорить, что это не рекомендуемый способ, но не могли бы вы предложить решение, которое гарантирует немедленное завершение работы приложения из фона? Если нет, то System.exit - это путь, пока Google не предоставит лучший метод.
Кэмерон Макбрайд
74
Кто решит, что вы не «должны», те же люди, которые создали метод, который на самом деле не выходит? Если пользователи не хотят закрывать свои приложения, то 5-е по популярности платное приложение не станет убийцей задач. Людям нужно освободить память, а основная ОС не справляется с этой задачей.
Кэмерон Макбрайд
19
Согласились, что это опрометчиво, но проголосовали за то, что дали реальный ответ на заданный вопрос. Я очень устаю слышать «ты не хочешь этого делать», без объяснений. Android - абсолютный кошмар в отношении документации для подобных вещей по сравнению с iPhone.
DougW
11
Нет никакого преимущества памяти в использовании убийц задач с Android. Android уничтожит и очистит все приложения, которые не находятся на переднем плане, если приложению на переднем плане требуется больше памяти. В некоторых случаях Android даже снова открывает приложение, которое было закрыто убийцей задач. Android заполнит всю ненужную память недавно использованными приложениями, чтобы уменьшить время переключения приложений. НЕ СОЗДАЙТЕ ПРИЛОЖЕНИЯ С КНОПКОЙ ВЫХОДА. НЕ ИСПОЛЬЗУЙТЕ МЕНЕДЖЕР ЗАДАЧ НА ANDROID. geekfor.me/faq/you-shouldnt-be-using-a-task-killer-with-android android-developers.blogspot.com/2010/04/…
Януш
23

Вот как я это сделал:

Я просто положил

Intent intent = new Intent(Main.this, SOMECLASSNAME.class);
Main.this.startActivityForResult(intent, 0);

внутри метода, который открывает действие, затем внутри метода SOMECLASSNAME, который предназначен для закрытия приложения, которое я поместил:

setResult(0);
finish();

И я положил следующее в моем основном классе:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == 0) {
        finish();
    }
}
Стивен
источник
18

Просто для того, чтобы ответить на мой собственный вопрос через много времени (так как CommonsWare прокомментировал самый популярный ответ, сказав, что мы НЕ должны этого делать):

Когда я хочу выйти из приложения:

  1. Я начинаю свое первое действие (либо заставку, либо любое другое занятие, которое в данный момент находится внизу стека активности) с FLAG_ACTIVITY_CLEAR_TOP(которое завершит все остальные действия, начатые после него, что означает - все они). Просто сделайте так, чтобы эта активность была в стеке активности (не заканчивайте ее по какой-то причине заранее).
  2. Я призываю finish()к этой деятельности

Вот и все, у меня неплохо работает.

Danail
источник
3
Это на самом деле не убивает ваше приложение. Это все еще будет отображаться в списке приложений. Я просто убиваю всю твою деятельность.
Йорис Веймар
1
FLAG_ACTIVITY_CLEAN_TOP не работает для смартфонов Sony. Это можно обойти, добавив атрибут android: clearTaskOnLaunch = "true" к активности на AndroidManifest.xml
Rusfearuth,
10

Просто напишите этот код на кнопке EXIT click.

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("LOGOUT", true);
startActivity(intent);

И в методе onCreate () вашего MainActivity.class напишите ниже код в качестве первой строки,

if (getIntent().getBooleanExtra("LOGOUT", false))
{
    finish();
}
Лалит Джавале
источник
9

Это невозможно с помощью API-интерфейсов. Операционная система (Android) решает, когда процесс должен быть удален или оставлен в памяти. Это делается из соображений эффективности: если пользователь решает перезапустить приложение, то оно уже есть, и его не нужно загружать в память.

Так что нет, это не только обескураживает , это невозможно сделать.

Матиас
источник
4
Вы всегда можете сделать что-то вроде Integer z = null; z.intValue (); // худший ответ
Джо Планте
6
Правда что. Вы также можете разбить свой телефон о стену, что приведет к прекращению всех открытых приложений, если приложить достаточное давление. Я все еще не рекомендовал бы это. Я обновил свой пост соответственно.
Матиас
@JoePlante, который также оставляет приложение в фоновом режиме при открытии меню приложений. Кажется, это невозможно.
peresisUser
8

Для выхода из приложения:

Способ 1:

позвоните finish();и переопределите onDestroy();. Введите следующий код в onDestroy():

System.runFinalizersOnExit(true)

или

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

Способ 2:

public void quit() {
    int pid = android.os.Process.myPid();
    android.os.Process.killProcess(pid);
    System.exit(0);
}

Способ 3:

Quit();

protected void Quit() {
    super.finish();
}

Способ 4:

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

if (getIntent().getBooleanExtra("EXIT", false)) {
     finish();
}

Способ 5:

Иногда вызов finish()будет завершать только текущую активность, а не все приложение. Однако для этого есть обходной путь. Каждый раз, когда вы начинаете activity, начните с помощью startActivityForResult(). Если вы хотите закрыть все приложение, вы можете сделать что-то вроде следующего:

setResult(RESULT_CLOSE_ALL);
finish();

Затем определите onActivityResult(...)обратный вызов для каждого действия, чтобы при activityвозврате со RESULT_CLOSE_ALLзначением он также вызывал finish():

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(resultCode){
        case RESULT_CLOSE_ALL:{
            setResult(RESULT_CLOSE_ALL);
            finish();
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}
hitesh141
источник
Intent intent = new Intent (getApplicationContext (), LoginActivity.class); intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra ("EXIT", true); startActivity (намерение); работает супер хорошо.
hitesh141
Я начал деятельность A-> B-> C-> D. Когда кнопка «Назад» нажата на Занятии D, я хочу перейти на Занятие A. Поскольку А - моя отправная точка и, следовательно, уже в стеке, все действия в верхней части А очищаются, и вы не можете вернуться к любому другому Занятию из А . @Override public boolean onKeyDown (int keyCode, событие KeyEvent) {if (keyCode == KeyEvent.KEYCODE_BACK) {Intent a = new Intent (this, A.class); a.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity (а); вернуть истину; } return super.onKeyDown (keyCode, event); }
hitesh141
5

Вот как Windows Mobile работала для ... ну ... когда-либо! Вот что Microsoft должна сказать по этому вопросу:

http://blogs.msdn.com/windowsmobile/archive/2006/10/05/The-Emperor-Has-No-Close.aspx (грустно ли, что я запомнил название поста в блоге с 2006 года? Я нашел статью в Google, выполнив поиск "у императора нет близких", смеется)

Коротко:

Если системе требуется больше памяти, пока приложение находится в фоновом режиме, оно закроет приложение. Но если системе не нужно больше памяти, приложение останется в оперативной памяти и будет готово быстро вернуться в следующий раз, когда это понадобится пользователю.

Многие комментарии в этом вопросе в O'Reilly предполагают, что Android ведет себя примерно так же, закрывая приложения, которые не использовались некоторое время, только когда Android требуется память, которую они используют.

Поскольку это стандартная функция, то изменение поведения на принудительное закрытие приведет к изменению пользовательского интерфейса. Многие пользователи привыкли бы к легкому отказу от своих приложений для Android, поэтому, когда они отклоняют одно из них с намерением вернуться к нему после выполнения некоторых других задач, они могут быть довольно разочарованы тем, что состояние приложения сбрасывается или что оно занимает больше времени. открыть. Я бы придерживался стандартного поведения, потому что это то, что ожидается.

Энди Э
источник
5

Вызов finish()метода для Activity оказывает желаемое влияние на текущую активность.

r1k0
источник
14
Нет, это не так. Завершает текущую активность, а не приложение. Если вы закончите () самый нижний уровень активности в стеке задач, ваше приложение, похоже, будет закрыто, но Android может решить сохранить его так долго, как сочтет нужным.
Матиас
В действительности, однако, если вам необходимо полностью выйти из приложения, вам нужно вызвать метод finish для каждого действия, а также подумать о любых сервисах, которые вы могли запустить. Я также отредактировал первоначальный ответ - извините за упущение.
r1k0
3

ни один из вышеперечисленных ответов не работает хорошо в моем приложении

вот мой рабочий код

на вашей кнопке выхода:

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
mainIntent.putExtra("close", true);
startActivity(mainIntent);
finish();

этот код должен закрыть любое другое действие и вывести MainActivity на первое место на вашем MainActivity:

if( getIntent().getBooleanExtra("close", false)){
    finish();
}
Даниэль Сатья
источник
2

Поместите finish();заявление как ниже:

myIntent.putExtra("key1", editText2.getText().toString());

finish();

LoginActivity.this.startActivity(myIntent);

В каждой деятельности.

начинающий
источник
2
@Override
    protected void onPause() {

        super.onPause();

        System.exit(0);

    }
Харис Д.
источник
2

Скопируйте приведенный ниже код и вставьте файл AndroidManifest.xml в поле «Первый тег активности».

<activity                        
            android:name="com.SplashActivity"
            android:clearTaskOnLaunch="true" 
            android:launchMode="singleTask"
            android:excludeFromRecents="true">              
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"
                />
            </intent-filter>
        </activity>     

Также добавьте этот код ниже под тегом активности в файле AndroidManifest.xml.

 android:finishOnTaskLaunch="true"
Android
источник
1

Не возможно с 2.3. Я ищу много и перепробовал много приложений. Лучшее решение - установить оба (go taskmanager) и (быстрая перезагрузка). Когда они используются вместе, это сработает и освободит память. Другим вариантом является обновление до Android Ice Cream Sandwich 4.0.4, который позволяет контролировать (закрывать) приложения.

али
источник
1

Я хотел вернуться на домашний экран моего устройства Android, поэтому я просто использовал:

moveTaskToBack(true);
Алиреза Азади
источник
Это не ответ на этот вопрос
Лео поддерживает Монику Челлио
1

Использование finishAffinity()может быть хорошим вариантом, если вы хотите закрыть все действия приложения. В соответствии с Android Docs-

Finish this activity as well as all activities immediately below it in the current task that have the same affinity.
Санджит А
источник
1
public class CloseAppActivity extends AppCompatActivity
{
    public static final void closeApp(Activity activity)
    {
        Intent intent = new Intent(activity, CloseAppActivity.class);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
        activity.startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        finish();
    }
}

и в декларации:

<activity
     android:name=".presenter.activity.CloseAppActivity"
     android:noHistory="true"
     android:clearTaskOnLaunch="true"/>

Затем вы можете позвонить, CloseAppActivity.closeApp(fromActivity)и приложение будет закрыто.

Артём
источник
1

Просто напишите следующий код в onBackPressed:

@Override
public void onBackPressed() {
    // super.onBackPressed();

    //Creating an alert dialog to logout
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("Do you want to Exit?");
    alertDialogBuilder.setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    Intent intent = new Intent(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_HOME);
                    startActivity(intent);
                }
            });

    alertDialogBuilder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {

                }
            });

    //Showing the alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}
Рамеш Р
источник
0

по вызову finish (); в кнопке OnClick или в меню

case R.id.menu_settings:

      finish();
     return true;
k0sh
источник
Как указано в комментариях другого ответа, finish()не убивает приложение. Это может вернуться к предыдущему Намерению или фону Приложения.
Raptor
0

Я думаю, что это закроет вашу деятельность и все связанные с ней действия Sub.

public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();]
        if (id == R.id.Exit) {
            this.finishAffinity();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
Лакшай Джайн
источник
0

Лучший и самый короткий способ использования таблицы System.exit.

System.exit(0);

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

Расул Мири
источник
0

Используйте " this.FinishAndRemoveTask();" - приложение закрывается правильно

Нитика Чопра
источник