Як закрити додаток Android?


157

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

Як це зробити? Це хороша практика на платформі Android?

Якщо я покладаюся на кнопку «назад», програма закриває програму, але вона залишається у фоновому режимі. Існує навіть програма під назвою "TaskKiller" лише для того, щоб убити ці програми на задньому плані.


4
Це питання вже задали. Подивіться на stackoverflow.com/questions/2033914/… або stackoverflow.com/questions/2042222/android-close-application
Дейв Вебб

цікаво, чому не хотілося б, щоб його програма працювала навіть у фоновому режимі?
Дарпан

Відповіді:


139

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

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

Не забудьте поводитися з клавішею ДОМАШНЯ для будь-яких меню та в тих діях, які розпочаті з меню. Те саме стосується ключа ПОШУК . Нижче наведено кілька прикладів занять для ілюстрації:

Ось приклад кореневої діяльності, яка вбиває додаток при його знищенні:

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);
    }

}

Ось абстрактна діяльність, яку можна розширити, щоб обробляти клавішу ДОМАШНЯ для всіх заходів, які її розширюють:

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());
        }

    }
}

1
Це повинно знищити всю програму, яка називається System.exit (0), включаючи всі дії, які виконуються як частина програми. Усі інші програми продовжуватимуться працювати. Якщо ви хочете вбити лише одну активність у додатку, але не всі дії в додатку, тоді вам потрібно зателефонувати метод закінчення () діяльності, яку ви хочете вбити.
Danny Remington - OMS

2
Дуже дякую за цю НФО. Я роблю гру з AndEngine, і коли я закликаю закінчити, навіть у всіх видах діяльності, android все ще не буде повністю очищений, і коли гру буде запущено, він повністю вирвав мої текстури GL були всі вибиті і т.д. Отож, дослідивши, думаючи, що це AndEngine, я зрозумів, що це повинно бути щось не так, оскільки андроїд намагався зберегти процес, коли я хотів вийти з нього. Усі коментарі "ой не варто викликати вихід, це руйнує досвід користувачів" - це нісенітниця. Погода додаток має залишатися відкритим .......

17
Жодна виробнича програма не повинна використовувати цей код. Жодна виробнича програма не повинна викликати будь-який код, показаний у killApp(), оскільки Google вказав, що це призведе до непередбачуваної поведінки.
CommonsWare

1
System.runFinalizersOnExit (вірно); метод застарілий. Який ще спосіб безпечно закрити додаток (зібраний сміття) ?.
Ajeesh

1
На той момент не було застарілим, коли це було спочатку розміщено. Оскільки поточна AP тоді становила 7, а теперішній API зараз 19, існує певний спосіб зробити це зараз.
Danny Remington - OMS

68

ТАК! Ви, безумовно, можете закрити свою програму, щоб вона більше не працювала у фоновому режимі. Як і інші, коментуючи finish()це, рекомендований Google спосіб, який насправді не означає, що ваша програма закрита.

System.exit(0);

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

Я особисто ненавиджу, коли я вибираю Exit у програмі, і він насправді не виходить.


44
Використання System.exit () категорично не рекомендується.
CommonsWare

14
Я не заперечуватиму, що це не рекомендований спосіб, але чи можете ви надати рішення, яке гарантуватиме негайне вихід програми з фону? Якщо ні, то System.exit - це шлях, поки Google не надасть кращий метод.
Кемерон МакБрайд

74
Хто вирішує, що вам не належать ті самі люди, які створили метод, який насправді не виходить? Якщо користувачі не хотіли, щоб їхні програми закривались, п'ятий найпопулярніший платний додаток не був би вбивцею завдань. Люди потребують звільнення пам’яті, а основна ОС не справляється із цим завданням.
Камерон МакБрайд

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/…
Janusz

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()цю діяльність

Це воно, працює для мене досить добре.


3
Це фактично не вбиває ваш додаток. Він все одно відображатиметься у списку програм. Я просто вбиваю всю вашу діяльність.
Йоріс Веймар

1
FLAG_ACTIVITY_CLEAN_TOP не працює для смартфонів Sony. Ви можете вирішити це, додавши атрибут android: clearTaskOnLaunch = "true" для активності на AndroidManifest.xml
Rusfearuth

10

Просто напишіть цей код на вашій кнопці EXIT.

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);
}

Намір наміру = новий Намір (getApplicationContext (), LoginActivity.class); intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra ("EXIT", true); startActivity (наміри); працює дуже добре.
hitesh141

Я розпочав Діяльність A-> B-> C-> D. Якщо натиснути кнопку "Назад" на "Дія", я хочу перейти до "Активності". Оскільки A є моєю відправною точкою, тому вже на стеці очищено всі дії вгорі A, і ви не можете повернутися до будь-якої іншої діяльності з A . @Override public boolean onKeyDown (int keyCode, KeyEvent подія) {if (keyCode == KeyEvent.KEYCODE_BACK) {Intent a = new Intent (this, A.class); a.addFlags (Намір.FLAG_ACTIVITY_CLEAR_TOP); startActivity (a); повернути правду; } повернути super.onKeyDown (keyCode, подія); }
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()методу на активності бажано впливає на цю поточну активність.


14
Ні, це не так. Він закінчує поточну активність, а не додаток. Якщо ви закінчите () найнижчу Активність на стеку завдань, ваша програма, схоже, вийде, але Android може вирішити фактично тримати її довше, наскільки вона вважатиме за потрібне.
Маттіас

Дійсно, однак, якщо вам потрібно повністю закрити свою заявку, вам потрібно зателефонувати за способом завершення кожної діяльності, а також подумати про будь-які послуги, які ви могли б почати. Я також відредагував початкову відповідь - вибачте за упущення.
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

Скопіюйте код нижче та вставте файл 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"

1

Неможливо з 2.3. Я багато шукав і спробував багато програм. Найкраще рішення - встановити як (go taskmanager), так і (швидке перезавантаження). При використанні їх разом це спрацює і звільнить пам’ять. Ще одним варіантом є оновлення до Android сендвіч-морозива 4.0.4, що дозволяє контролювати (закривати) додатки.



1

Використання програми finishAffinity()може бути хорошим варіантом, якщо ви хочете закрити всю активність програми. Відповідно до Документів Android-

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

Просто напишіть такий код у onBackPress:

@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

зателефонувавши закінчити (); в кнопці OnClick або в меню

випадок R.id.menu_settings:

      finish();
     return true;

Як зазначено в коментарях інших відповідей, finish()додаток не вбиває. Це може повернутися до попереднього наміру або застосувати програму.
Раптор

0

Я думаю, що це закриє вашу діяльність та всю суб-діяльність, пов’язану з нею.

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);

VM зупиняє подальше виконання, і програма вийде.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.