Я хочу закрыть свое приложение, чтобы оно больше не работало в фоновом режиме.
Как это сделать? Это хорошая практика на платформе Android?
Если я полагаюсь на кнопку «назад», приложение закрывается, но остается в фоновом режиме. Есть даже приложение под названием «TaskKiller», чтобы убить эти приложения в фоновом режиме.
Ответы:
Android имеет механизм для безопасного закрытия приложения в соответствии с его документацией. В последнем действии, которое было завершено (обычно это основное действие, которое впервые возникло при запуске приложения), просто поместите пару строк в метод onDestroy (). Вызов System.runFinalizersOnExit (true) гарантирует, что все объекты будут завершены и сборщик мусора при выходе из приложения. Вы также можете быстро убить приложение с помощью android.os.Process.killProcess (android.os.Process.myPid ()), если хотите. Лучший способ сделать это - поместить метод, подобный следующему, в вспомогательный класс, а затем вызывать его всякий раз, когда необходимо убить приложение. Например, в методе уничтожения корневого действия (при условии, что приложение никогда не убивает это действие):
Также Android не будет уведомлять приложение о событии клавиши HOME , поэтому вы не можете закрыть приложение, когда нажата клавиша HOME . Android резервирует ключевое событие HOME для себя, чтобы разработчик не мог запретить пользователям выходить из приложения. Однако вы можете определить, нажата ли клавиша HOME , установив флаг в true во вспомогательном классе, который предполагает, что клавиша HOME была нажата, затем изменив флаг на false, когда происходит событие, показывающее, что клавиша HOME не была нажата, а затем проверка, чтобы увидеть нажатие клавиши HOME в методе onStop () действия.
Не забывайте обращаться с клавишей HOME для любых меню и действий, запускаемых меню. То же самое касается ключа поиска . Ниже приведены примеры классов для иллюстрации:
Вот пример корневого действия, которое убивает приложение, когда оно уничтожается:
Вот абстрактное действие, которое можно расширить для обработки ключа HOME для всех действий, которые его расширяют:
Вот пример экрана меню, который обрабатывает клавишу HOME :
Вот пример вспомогательного класса, который обрабатывает ключ HOME в приложении:
источник
killApp()
, так как Google указал, что это приведет к непредсказуемому поведению.ДА! Вы наверняка можете закрыть свое приложение, чтобы оно больше не работало в фоновом режиме. Как и другие, прокомментировал
finish()
рекомендованный Google способ, который не означает, что ваша программа закрыта.Это прямо там закроет ваше приложение, не оставляя ничего работающего в фоновом режиме. Однако, используйте это с умом и не оставляйте файлы открытыми, открывайте дескрипторы базы данных и т. Д. Эти вещи обычно вычищаются с помощью
finish()
команды.Лично я НЕНАВИЖУ, когда я выбираю «Выход» в приложении, и оно действительно не завершается.
источник
Вот как я это сделал:
Я просто положил
внутри метода, который открывает действие, затем внутри метода SOMECLASSNAME, который предназначен для закрытия приложения, которое я поместил:
И я положил следующее в моем основном классе:
источник
Просто для того, чтобы ответить на мой собственный вопрос через много времени (так как CommonsWare прокомментировал самый популярный ответ, сказав, что мы НЕ должны этого делать):
Когда я хочу выйти из приложения:
FLAG_ACTIVITY_CLEAR_TOP
(которое завершит все остальные действия, начатые после него, что означает - все они). Просто сделайте так, чтобы эта активность была в стеке активности (не заканчивайте ее по какой-то причине заранее).finish()
к этой деятельностиВот и все, у меня неплохо работает.
источник
Просто напишите этот код на кнопке EXIT click.
И в методе onCreate () вашего MainActivity.class напишите ниже код в качестве первой строки,
источник
Это невозможно с помощью API-интерфейсов. Операционная система (Android) решает, когда процесс должен быть удален или оставлен в памяти. Это делается из соображений эффективности: если пользователь решает перезапустить приложение, то оно уже есть, и его не нужно загружать в память.
Так что нет, это
не толькообескураживает, это невозможносделать.источник
Для выхода из приложения:
Способ 1:
позвоните
finish();
и переопределитеonDestroy();
. Введите следующий код вonDestroy()
:или
Способ 2:
Способ 3:
Способ 4:
Способ 5:
Иногда вызов
finish()
будет завершать только текущую активность, а не все приложение. Однако для этого есть обходной путь. Каждый раз, когда вы начинаетеactivity
, начните с помощьюstartActivityForResult()
. Если вы хотите закрыть все приложение, вы можете сделать что-то вроде следующего:Затем определите
onActivityResult(...)
обратный вызов для каждого действия, чтобы приactivity
возврате соRESULT_CLOSE_ALL
значением он также вызывалfinish()
:источник
Вот как 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, поэтому, когда они отклоняют одно из них с намерением вернуться к нему после выполнения некоторых других задач, они могут быть довольно разочарованы тем, что состояние приложения сбрасывается или что оно занимает больше времени. открыть. Я бы придерживался стандартного поведения, потому что это то, что ожидается.
источник
Вызов
finish()
метода для Activity оказывает желаемое влияние на текущую активность.источник
ни один из вышеперечисленных ответов не работает хорошо в моем приложении
вот мой рабочий код
на вашей кнопке выхода:
этот код должен закрыть любое другое действие и вывести MainActivity на первое место на вашем MainActivity:
источник
Поместите
finish();
заявление как ниже:В каждой деятельности.
источник
источник
Скопируйте приведенный ниже код и вставьте файл AndroidManifest.xml в поле «Первый тег активности».
Также добавьте этот код ниже под тегом активности в файле AndroidManifest.xml.
источник
Не возможно с 2.3. Я ищу много и перепробовал много приложений. Лучшее решение - установить оба (go taskmanager) и (быстрая перезагрузка). Когда они используются вместе, это сработает и освободит память. Другим вариантом является обновление до Android Ice Cream Sandwich 4.0.4, который позволяет контролировать (закрывать) приложения.
источник
Я хотел вернуться на домашний экран моего устройства Android, поэтому я просто использовал:
источник
Использование
finishAffinity()
может быть хорошим вариантом, если вы хотите закрыть все действия приложения. В соответствии с Android Docs-источник
и в декларации:
Затем вы можете позвонить,
CloseAppActivity.closeApp(fromActivity)
и приложение будет закрыто.источник
Просто напишите следующий код в onBackPressed:
источник
по вызову finish (); в кнопке OnClick или в меню
источник
finish()
не убивает приложение. Это может вернуться к предыдущему Намерению или фону Приложения.Я думаю, что это закроет вашу деятельность и все связанные с ней действия Sub.
источник
Лучший и самый короткий способ использования таблицы System.exit.
ВМ останавливает дальнейшее выполнение и программа завершает работу.
источник
Используйте "
this.FinishAndRemoveTask();
" - приложение закрывается правильноисточник