Не одобряется ли выход из приложения? - PullRequest
1108 голосов
/ 09 января 2010

Продолжая попытки освоить Android, я просто прочитал следующее :

Вопрос: Есть ли у пользователя выбор убить приложение если мы не добавим пункт меню, чтобы убить его? Если такой опции не существует, как пользователь закрывает приложение?

Ответ: (Romain Guy): Пользователь этого не делает, система обрабатывает это автоматически. Вот для чего нужен жизненный цикл активности (особенно onPause / onStop / onDestroy). Что бы вы ни делали, не ставьте кнопку «выйти» или «выйти» из приложения. Это бесполезно с моделью приложения Android. Это также противоречит принципам работы основных приложений.

Хе-хе, за каждый мой шаг в мире Android я сталкиваюсь с какой-то проблемой = (

По-видимому, вы не можете закрыть приложение в Android (но система Android может очень хорошо полностью уничтожить ваше приложение, когда оно будет похоже). Что с этим? Я начинаю думать, что невозможно написать приложение, которое функционирует как «обычное приложение» - что пользователь может выйти из приложения, когда он / она решит это сделать. Это не то, на что должна полагаться ОС.

Приложение, которое я пытаюсь создать, не является приложением для Android Market. Это не приложение для «широкого использования» широкой публикой, это бизнес-приложение, которое будет использоваться в очень узкой сфере бизнеса.

Я действительно с нетерпением ждал разработки для платформы Android, поскольку она решает множество проблем, существующих в Windows Mobile и .NET. Тем не менее, последняя неделя была для меня своего рода поворотом ... Надеюсь, мне не придется отказываться от Android, но сейчас это выглядит не очень хорошо = (

Есть ли способ для действительно выйти из приложения?

Ответы [ 38 ]

2 голосов
/ 14 апреля 2013

Для первой (начальной) активности приложения,

@Override
public void onBackPressed(){

    // Exit
    moveTaskToBack(true);
}

работал на меня. Я хочу закрыть приложение здесь. И вернуться с других активностей; Я использовал намерения, например

@Override
public void onBackPressed(){

    // Going back....
    Intent intent = new Intent(ActivityB.this, ActivityA.class);
    startActivity(intent);
    finish();
}

Примечание: Этот код полезен для сценария, когда разработчик хочет вернуться из ActivityZ в ActivityA и затем закрыть приложение.

2 голосов
/ 29 августа 2012

Это довольно просто. Просто следуйте инструкциям, которые я вам скажу:

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

Intent i1 = new Intent(this, AnotherActivity);
startActivity(i1) 

Вы должны просто добавить finish(); после запуска целевого действия для каждого действия от начала до конца, например,

Intent i1=new Intent(this, AnotherActivity);
startActivity(i1) 
finish();

Поэтому всякий раз, когда вы нажимаете кнопку выхода, которая использует finish () или System.exit (0), которая должна полностью закрыть ваше приложение.

1 голос
/ 08 февраля 2012

Используйте этот код:

Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
ListActivity.this.startActivity(i);
finish();
0 голосов
/ 11 апреля 2018

Другим вариантом может быть сервис специальных возможностей Android, который приложение Greenify использует для принудительного закрытия приложений для ускорения работы памяти. Имея доступ к службе доступа к приложениям, вы можете нажимать на кнопки, так что в основном приложение Greenify нажимает кнопку принудительного закрытия в настройках приложения:

Здесь вы можете ознакомиться с услугами доступности: https://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html

Вот кнопка настройки, которую сервис специальных возможностей нажимает программно: enter image description here

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

1) Зарегистрировать заявку на услуги доступности 2) В зависимости от ваших требований, если вы хотите убить все приложения, получите список всех пакетов. 3) Перейдите на экран настроек и нажмите кнопку «Закрыть». Вот и все. Я могу поделиться примером кода. Я также создал приложение типа greenify как домашнее задание. Спасибо

Обновление: «Пользователь этого не делает, система обрабатывает это автоматически.» Так что в основном с этим решением мы косвенно используем принудительное закрытие системы, но по требованию пользователя. Так что оба остаются счастливыми: -)

0 голосов
/ 30 июня 2015

Если вы укажете API> = 16, Activity # finishAffinity () будет соответствовать вашим потребностям.

0 голосов
/ 16 сентября 2014

Вы можете использовать Process.killProcess(Process.myPid());, чтобы убить ваше приложение, но, возможно, оно небезопасно? Я не столкнулся с какой-либо проблемой или сбоем после того, как я использовал этот метод и после того, как я использовал это, процесс моего приложения в списке DDMS исчез.

0 голосов
/ 22 июня 2014

Одной из важных причин наличия кнопки выхода является реклама «при выходе». На выходе можно отобразить некоторые приносящие доход объявления. Это все еще несколько раздражает, как и вся реклама, но может быть менее раздражающим, чем то, что постоянно крутится, используя драгоценное место на экране. Некоторые рекламные сети предлагают такой способ рекламы. Но на самом деле нельзя просто нажать кнопку выхода, которая ничего не делает после показа этого объявления!

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

Возможно, можно использовать Activity.finish () или System.exit (0).

0 голосов
/ 26 марта 2014

В настоящее время я реализовал следующее в своем приложении. Пусть это поможет выйти из приложения, куда вы захотите. Я вызываю эту функцию из меню панели действий.

public static void exitApplication(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        exitApplicationHC(context);
    }
    else {
        exitApplicationPreHC(context);
    }
}

private static void exitApplicationPreHC(Context context) {
    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);
    context.startActivity(i);
    if (context instanceof Activity) {
        ((Activity) context).finish();
    }
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private static void exitApplicationHC(Context context) {
    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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...