it-swarm.com.ru

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

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

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

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

52
Yohan Weerasinghe

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

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

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

Вы можете вызвать 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);

                }
            });
39
Anchit Mittal

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

public void onBackPressed() {
  moveTaskToBack(true);
  Android.os.Process.killProcess(Android.os.Process.myPid());
  System.exit(1);
}
29
Pir Fahim Shah
 @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();
    }
19
Aditya_Android

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

17
Amon Olimov

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

  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());
11
Kasun

Начиная с 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 программно


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

7
Shreshth Kharbanda
Android.os.Process.killProcess(Android.os.Process.myPid());
5
kathir

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

Из документов,

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

4
Akeshwar Jha

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

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

3
Yesha Shah
 @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);
    }
3
azeem khan

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

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

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

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

2
Rishiraj Purohit

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

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

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

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);
2
Mahmood Ali

Работает с использованием только moveTaskToBack(true);

1
user3856297

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

moveTaskToBack(true);
    finish()
1
Stan Malcolm

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

1
JesusS

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

0
Konrad

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

0
Kaze Tdr

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

конец();

System.exit (0);

0
Abdullah alkış

просто используйте код в вашем backpress

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

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

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

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

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

0
Grzegorz Adam Hankiewicz

во фрагменте

. GetActivity () finishAndRemoveTask ();

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

finishAndRemoveTask ();

0
Rodrigo Givisiez
Just call these two Function

 finish();
 moveTaskToBack(true);
0
younes

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

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

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

Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
0
Hassnain Jamil