Android закрытие приложений java

Полное закрытие приложения. Метод?

Нужно сделать сохранение настроек при полном закрытии приложения. Так и не нашёл какой метод за это отвечает.

Эти методы мне не подходят:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
@Override public void onResume() { super.onResume(); Log.d(TAG, "+ ON RESUME +"); } @Override public void onPause() { super.onPause(); Log.d(TAG, "- ON PAUSE -"); } @Override public void onStop() { super.onStop(); Log.d(TAG, "-- ON STOP --"); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "- ON DESTROY -"); }

Полное закрытие приложения
Здравствуйте. Возник интересный вопрос, как можно полностью закрыть приложение, т.е. не закрыть.

Закрытие приложения.
У меня возникли проблемы с методом finish(), подскажите как можно закрыть приложение без ошибки.

Закрытие приложения эклипс android
Доброго времени суток если в метод в java который закрывает полность приложение но именно не.

Какой метод используется для того чтобы определить закрытие браузера(выход из приложения)
Добрый день. прошу подсказать какой класс нужно использовать чтобы определить закрытие.

ЦитатаСообщение от V0v1k Посмотреть сообщение

А есть что то другое. Именно по смахиванию чтоб срабатывал? Допустим RAD XE5 из под него делаю приложение под Андроид в методе onclose делаю все что нужно и при смахивании срабатывает. Но отказался от этого так как сильно виснут приложения разработанные на этой платформе. Следовательно есть такой метод.

ЦитатаСообщение от V0v1k Посмотреть сообщение

Просто при onpause я не смогу по мимо записи настроек отправить на сервер что девайс отключился от сервера(((
А мониторинг мне очень важен. (((

Добавлено через 1 минуту
Получается когда я нажимаю клавишу назад он делает OnPause ((( Но работае в фоне и отправляет данные на сервер т.е. получается он онлайн. А это не есть гуд(

ЦитатаСообщение от cezer_ak Посмотреть сообщение

Допустим RAD XE5 из под него делаю приложение под Андроид в методе onclose делаю все что нужно и при смахивании срабатывает. Но отказался от этого так как сильно виснут приложения разработанные на этой платформе. Следовательно есть такой метод.

Не знал! Уверены? Я думал что в «смахивании» (в самом списке) висят программы и из ИСТОРИИ! Даже если они были выгружены из памяти. Там у меня застревают ВСЕ когда-либо открытые прогрммы кроме окон вызываных из сервисов. В том числе и игрушки в которых было вызвано из меню EXIT. И программы которые были СВЕРНУТЫ (например кнопкой HOME) — вот их реально можно так закрыть. У СВЕРНУТЫХ программ возможно и вызовется onStop() или onDestroy(), а у уже закрытых уже ничего не вызовется.

Источник

Android: закрытие приложения по кнопке "назад"

Но что-то мне говорит, что это не совсем верно и избыточно. Приложение — игра с libgdx, используется только одно Activity.

Когда Вы закрываете приложение кнопной «Назад», то вызывается метод onDestroy(). Для этого перехватывать нажатие этой кнопки в методе onBackPressed() не имеет смысла. Достаточно сделать так:

Читайте также:  float: left

public void onDestroy() moveTaskToBack(true);

Перехватывать нажатие кнопки «Назад» имеет смысл тогда, когда надо реализовать подтверждение выхода из игры или что-то в этом роде.

Если вы от Application не наследуетесь, и как следсвие не изпользуете другого Context кроме Context-а вашего Activity — то достаточно только finish(). Ну и плюс конечно, если вы сами создаете thread-ы то их лучше явным образом удалить.

Как правильно завершить свой поток в Actitvity в onDestroy? Не подумайте чего — все облазил — каких методов только не предлагается. Но видимо так?

А если еще и SurfaceView используется, то нужно его принудительно завершать? удалять калбак из него? finish() при использовании SurfaceView не всегда закрывает приложение корректно — иногда появлzется исключение — видимо не закрывается поток рисования в SurfaceView, хотя в SurfaceView.onDestroy и делается drawingThread.interrupt().

//Это для пункта EXIT собственного меню public void destroy()

Но при этом у потока backgroundThread есть «чудо» переменная indicatorOfWork

public void destroy() < this.indicatorOfWork = false; try< this.join(); >catch() < >> public run() < while(this.indicatorOfWork)< doSomeWork(); >> 

Тогда как должен выглядеть для кнопки НАЗАД этот метод?

//Это стандартное public void onDestroy()

Источник

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

Я нашел несколько кодов для выхода из приложения Android программно. Вызов любого из следующего кода в onDestroy() полностью закроет приложение?

  1. System.runFinalizersOnExit(true)
    (ИЛИ ЖЕ)
  2. android.os.Process.killProcess(android.os.Process.myPid());

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

35 ответов

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

this.finishAffinity ();

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

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

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

finishAndRemoveTask();

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

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

это лучший способ выйти из приложения.

Если вы будете использовать только finishAffinity(); без System.exit(0); Ваше приложение будет закрыто, но выделенная память все еще будет использоваться вашим телефоном, так что. если вы хотите полностью очистить приложение, используйте оба из них.

Читайте также:  Php include path includes pear

Это самый простой метод, который работает где угодно, выйдите из приложения по-настоящему, у вас может быть много открытых действий, и все будет без проблем.

public void exitAppCLICK (View view)

или если вы хотите что-то приятное, например, с диалоговым окном предупреждения с 3 кнопками ДА НЕТ и ОТМЕНА

// alertdialog for exit the app AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); // set the title of the Alert Dialog alertDialogBuilder.setTitle("your title"); // set dialog message alertDialogBuilder .setMessage("your message") .setCancelable(false) .setPositiveButton("YES"), new DialogInterface.OnClickListener() < public void onClick(DialogInterface dialog, int id) < // what to do if YES is tapped finishAffinity(); System.exit(0); >>) .setNeutralButton("CANCEL"), new DialogInterface.OnClickListener() < public void onClick(DialogInterface dialog, int id) < // code to do on CANCEL tapped dialog.cancel(); >>) .setNegativeButton("NO"), new DialogInterface.OnClickListener() < public void onClick(DialogInterface dialog, int id) < // code to do on NO tapped dialog.cancel(); >>); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); 

Пожалуйста, подумайте над тем, нужно ли вам убить приложение: почему бы не позволить ОС выяснить, где и когда освободить ресурсы?

В противном случае, если вы абсолютно уверены, используйте

В ответ на комментарий @dave Appleton: во-первых, прочитайте большой комбо-вопрос @ gabriel, опубликованный: » Не одобряется ли выход из приложения?

Теперь, предполагая, что у нас это есть, вопрос здесь по-прежнему имеет ответ: код, который вам нужен, если вы что-то делаете с выходом finish() , Очевидно, что вы можете иметь более одного вида деятельности и т. Д., Но это не главное. Позволяет управлять некоторыми из вариантов использования

  1. Вы хотите, чтобы пользователь прекратил все из-за использования памяти и «не работал в фоновом режиме?» Сомнительно. Позвольте пользователю остановить определенные действия в фоновом режиме, но позвольте ОС уничтожить все ненужные ресурсы.
  2. Вы хотите, чтобы пользователь не переходил к предыдущей активности вашего приложения? Ну, либо настройте его так, чтобы он не работал, либо вам нужна дополнительная опция. Если большую часть времени работает задняя часть = предыдущая активность, не будет ли пользователь просто нажать домой, если он / она хочет сделать что-то еще?
  3. Если вам нужен какой-то сброс, вы можете выяснить, было ли / как / и т.д. ваше приложение завершено, и если ваша активность снова сфокусировалась, вы можете принять меры, показав новый экран вместо того, чтобы перезапустить, где вы были.

Итак, в конце концов, конечно, finish() не убивает ничего, но это все еще инструмент, который вам нужен, я думаю. Если есть вариант «убить все действия», я его еще не нашел.

Создать ExitActivity и объявить это в манифесте. И позвонить ExitActivity.exit(context) для выхода из приложения.

public class ExitActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); finish(); >public static void exit(Context context) < Intent intent = new Intent(context, ExitActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(intent); >> 

Я думаю, что приложение должно быть убито в некоторых случаях. Например, есть приложение, которое можно использовать только после входа в систему. У входа в систему есть две кнопки: «Войти» и «Отмена». Когда вы нажимаете кнопку «Отмена», это определенно означает «Завершить приложение». Никто не хочет приложение живым в фоновом режиме. Поэтому я согласен, что в некоторых случаях необходимо закрыть приложение.

Читайте также:  Css шрифт в директории

В Android нет выхода из приложения, SampleActivity.this.finish(); завершит текущую деятельность.

Когда вы переключаетесь с одного занятия на другое, продолжайте заканчивать предыдущее

Intent homeintent = new Intent(SampleActivity.this,SecondActivity.class); startActivity(homeintent); SampleActivity.this.finish(); 

Прежде всего, этот подход требует минимального Api 16.

Я разделю это решение на 3 части для более широкого решения этой проблемы.

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

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT <21)< finishAffinity(); >else if(Build.VERSION.SDK_INT>=21)

2. Если вы хотите выйти из приложения в классе, отличном от Activity, у которого есть доступ к Activity, используйте этот фрагмент кода:

 if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT <21)< getActivity().finishAffinity(); >else if(Build.VERSION.SDK_INT>=21)

3. Если вы хотите выйти из приложения в классе, отличном от Activity, и не можете получить доступ к Activity, например Service, я рекомендую вам использовать BroadcastReceiver. Вы можете добавить этот подход ко всем своим действиям в вашем проекте.

Создайте переменные экземпляра LocalBroadcastManager и BroadcastReceiver. Вы можете заменить getPackageName()+». Closeapp», если хотите.

LocalBroadcastManager mLocalBroadcastManager; BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() < @Override public void onReceive(Context context, Intent intent) < if(intent.getAction().equals(getPackageName()+".closeapp"))< if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT <21)< finishAffinity(); >else if(Build.VERSION.SDK_INT>=21) < finishAndRemoveTask(); >> > >; 

Добавьте их к методу onCreate() Activity.

 mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); IntentFilter mIntentFilter = new IntentFilter(); mIntentFilter.addAction(getPackageName()+".closeapp"); mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter); 

Также не забудьте вызвать незарегистрированный получатель в методе onDestroy() Activity

 mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver); 

Для выхода из приложения вы должны отправить трансляцию с помощью LocalBroadcastManager, который я использую в своем классе PlayService, который расширяет Сервис.

 LocalBroadcastManager localBroadcastManager = LocalBroadcastManager .getInstance(PlayService.this); localBroadcastManager.sendBroadcast(new Intent( getPackageName() + ".closeapp")); 

Ты можешь использовать finishAndRemoveTask () из API 21

public void finishAndRemoveTask ()

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

Это зависит от того, как быстро вы хотите закрыть приложение.

Безопасный способ закрыть ваше приложение — finishAffinity();

После закрытия всех процессов приложение закрывается. Это может занять некоторое время. Если вы закроете свое приложение таким образом и через короткое время перезапустите его, возможно, ваше новое приложение будет запущено в том же процессе. Со всеми незавершенными процессами и одиночными объектами старого приложения.

Если вы хотите быть уверены, что ваше приложение закрыто полностью, используйте System.exit(0);

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

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

new ANRWatchDog(2000).setANRListener(new ANRWatchDog.ANRListener() < public void onAppNotResponding(ANRError error) < MainActivity.this.finishAffinity(); System.exit(0); >>).start(); for(int i = 0; i

Это убивает ваше приложение через 2 секунды без отображения диалога ANR или чего-то в этом роде. Если вы удалите System.exit (0), запустите этот код и перезапустите приложение после его закрытия, вы столкнетесь с некоторым странным поведением, потому что бесконечный цикл все еще работает.

Источник

Оцените статью