Как программно выйти из приложения Android?

Я уверен, что этот вопрос задавался несколько раз, потому что я читал несколько. Мой клиент хочет, чтобы я поместил кнопку в его приложение, где пользователи могут щелкнуть и выйти. Я прочитал это и нашел, что вызов finish() сделает это. Но завершить - это только закрытие текущей текущей деятельности, верно? У меня много заданий, поэтому в этом случае я должен пройти каждый экземпляр задания и завершить его или превратить каждое действие в шаблон Singleton.

Я также узнал, что Activity.moveTaskToBack(true) может вывести вас на главный экран. Хорошо, это не закрытие, а фоновый процесс. Так это эффективно?

Какой метод я должен использовать, чтобы полностью закрыть приложение? Любой из описанных выше или любой другой метод/другое использование вышеуказанных методов?

Ответ 1

На самом деле каждый ищет закрытие приложения в событии onclick, где бы это ни было....

Итак, друзья друзей пробовали этот код. Поместите этот код в событие onclick

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent); 

Ответ 2

Вы можете вызвать System.exit(); чтобы выйти из всех занятий.

    submit=(Button)findViewById(R.id.submit);

            submit.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
                    System.exit(1);

                }
            });

Ответ 3

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

public void onBackPressed() {
  moveTaskToBack(true);
  android.os.Process.killProcess(android.os.Process.myPid());
  System.exit(1);
}

Ответ 4

 @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Exit Application?");
        alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                moveTaskToBack(true);
                                android.os.Process.killProcess(android.os.Process.myPid());
                                System.exit(1);
                            }
                        })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

Ответ 5

Это слишком легко. Используйте System.exit(0);

Ответ 6

Случайно есть две возможные ситуации:

  1. Вы можете выйти из деятельности
  2. Или вы хотите выйти из приложения

Вы можете выйти из действия, используя следующий код:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

Но это не убьет основные действия в том же приложении. Это просто свернет приложение.

Если вы хотите выйти из приложения, используйте следующий код для завершения процесса:

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

для моно разработки просто используйте

process.KillProcess(Process.MyPid());

Ответ 7

Начиная с api 16, вы можете использовать метод finishAffinity, который, кажется, довольно близок к закрытию всех связанных действий по его имени и описанию javadoc:

this.finishAffinity();

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

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


Начиная с API 21 вы можете использовать очень похожую команду

finishAndRemoveTask();

Завершает все действия в этой задаче и удаляет ее из списка недавних задач.

Альтернативы:

getActivity().finish();
System.exit(0);


int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

Источник: Как выйти из приложения Android программно


Надеюсь, поможет! Удачи!

Ответ 8

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

Ответ 9

Как насчет this.finishAffinity()

В документах

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

Ответ 10

 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }

Ответ 11

Используйте this.finishAffinity(); на этой кнопке вместо финиша(); Если это не сработает, попробуйте добавить в манифест андроид: noHistory = "true", а затем завершите свою деятельность с помощью функции uisng finish(); или finishAffinity();

Надеюсь, поможет....:)

Ответ 12

поместите это в свой onClic:

moveTaskToBack(true);
    finish()

Ответ 13

Попробуйте это при вызове. Я иногда использую его в onClick кнопки.

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

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

прочитайте этот вопрос для большей ясности android - код выхода из программы

Ответ 14

это очистит Task (стек действий) и начнет новую задачу

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);

Ответ 15

Достижение в Xamarin. Android:

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }

Ответ 16

активность призрака, вызываемая с помощью singleletop и finish() на onCreate, должна делать трюк

Ответ 17

Он работает только с moveTaskToBack(true);

Ответ 18

Если кто-то все еще задается вопросом, для Xamarin.Android (в моем случае это также Monogame, работающая на нем) команда FinishAndRemoveTask() в Activity делает работу очень хорошо!

Ответ 19

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

                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);

Ответ 20

Если вы используете EventBus (или действительно любую другую паб/вспомогательную библиотеку) в своем приложении для связи между действиями, которые вы можете отправить их явное событие:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

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

Ответ 21

Вместо System.exit(1) Просто используйте System.exit(0)

Ответ 22

Просто запустите две строки ниже, если вы хотите выйти из приложения

android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);

Ответ 23

во фрагменте

. GetActivity() finishAndRemoveTask();

в деятельности

finishAndRemoveTask();

Ответ 24

Just call these two Function

 finish();
 moveTaskToBack(true);

Ответ 25

просто добавьте этот код: -

@Override
    public void onBackPressed() {
        finish();
        super.onBackPressed();
    }

Ответ 26

Если вы используете как финиш, так и выходите из приложения, вы будете тесно сотрудничать

отделка();

System.exit(0);

Ответ 27

finish();
 finishAffinity();
 System.exit(0);

работал на меня