Я нашел несколько кодов для выхода из приложения Android программно. Вызов любого из следующего кода в onDestroy() полностью закроет приложение?
- System.runFinalizersOnExit(true)
(ИЛИ ЖЕ) - android.os.Process.killProcess(android.os.Process.myPid());
Я не хочу запускать приложение в фоновом режиме после нажатия кнопки «Выйти». Просьба предложить мне использовать любой из этих кодов для выхода из приложения? Если да, какой код я могу использовать? Это хороший способ выйти из приложения в Android?
user792219 13 июн ’11 в 12:08 2011-06-13 12:08
2011-06-13 12:08
35 ответов
Начиная с API 16, вы можете использовать метод finishAffinity, который, кажется, довольно близок к закрытию всех связанных действий по его имени и описанию Javadoc:
this.finishAffinity ();
Завершите это действие, а также все действия непосредственно под ним в текущем задании, которые имеют ту же привязку. Это обычно используется, когда приложение может быть запущено для другой задачи (например, из ACTION_VIEW типа контента, который он понимает), и пользователь использовал навигацию вверх для переключения из текущей задачи в свою собственную. В этом случае, если пользователь перешел к другим активным действиям второго приложения, все они должны быть удалены из исходной задачи как часть переключения задачи.
Кнопка закрытия программы как сделать проще простого
Обратите внимание, что это завершение не позволяет вам доставлять результаты к предыдущему действию, и будет выдано исключение, если вы попытаетесь это сделать.
Начиная с API 21 вы можете использовать очень похожую команду
finishAndRemoveTask();
Завершает все действия в этой задаче и удаляет ее из списка недавних задач.
user1984636 04 янв ’15 в 12:51 2015-01-04 12:51
2015-01-04 12:51
getActivity().finish(); System.exit(0);
это лучший способ выйти из приложения.
Лучшее решение для меня.
user879730 03 сен ’14 в 11:03 2014-09-03 11:03
2014-09-03 11:03
Если вы будете использовать только finishAffinity(); без System.exit(0); Ваше приложение будет закрыто, но выделенная память все еще будет использоваться вашим телефоном, так что. если вы хотите полностью очистить приложение, используйте оба из них.
Это самый простой метод, который работает где угодно, выйдите из приложения по-настоящему, у вас может быть много открытых действий, и все будет без проблем.
пример по нажатию кнопки
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();
user7363234 18 янв ’17 в 01:17 2017-01-18 01:17
2017-01-18 01:17
Пожалуйста, подумайте над тем, нужно ли вам убить приложение: почему бы не позволить ОС выяснить, где и когда освободить ресурсы?
ТОП ПРОГРАММ с открытым кодом, о которых ты не знал
В противном случае, если вы абсолютно уверены, используйте
finish();
Теперь, предполагая, что у нас это есть, вопрос здесь по-прежнему имеет ответ: код, который вам нужен, если вы что-то делаете с выходом finish() , Очевидно, что вы можете иметь более одного вида деятельности и т. Д., Но это не главное. Позволяет управлять некоторыми из вариантов использования
- Вы хотите, чтобы пользователь прекратил все из-за использования памяти и «не работал в фоновом режиме?» Сомнительно. Позвольте пользователю остановить определенные действия в фоновом режиме, но позвольте ОС уничтожить все ненужные ресурсы.
- Вы хотите, чтобы пользователь не переходил к предыдущей активности вашего приложения? Ну, либо настройте его так, чтобы он не работал, либо вам нужна дополнительная опция. Если большую часть времени работает задняя часть = предыдущая активность, не будет ли пользователь просто нажать домой, если он / она хочет сделать что-то еще?
- Если вам нужен какой-то сброс, вы можете выяснить, было ли / как / и т.д. ваше приложение завершено, и если ваша активность снова сфокусировалась, вы можете принять меры, показав новый экран вместо того, чтобы перезапустить, где вы были.
Итак, в конце концов, конечно, finish() не убивает ничего, но это все еще инструмент, который вам нужен, я думаю. Если есть вариант «убить все действия», я его еще не нашел.
user546999 13 июн ’11 в 12:13 2011-06-13 12:13
2011-06-13 12:13
Создать ExitActivity и объявить это в манифесте. И позвонить ExitActivity.exit(context) для выхода из приложения.
user4961750 14 июн ’18 в 12:26 2018-06-14 12:26
2018-06-14 12:26
Я думаю, что приложение должно быть убито в некоторых случаях. Например, есть приложение, которое можно использовать только после входа в систему. У входа в систему есть две кнопки: «Войти» и «Отмена». Когда вы нажимаете кнопку «Отмена», это определенно означает «Завершить приложение». Никто не хочет приложение живым в фоновом режиме.
Поэтому я согласен, что в некоторых случаях необходимо закрыть приложение.
user1090973 13 апр ’12 в 02:03 2012-04-13 02:03
2012-04-13 02:03
В Android нет выхода из приложения, SampleActivity.this.finish(); завершит текущую деятельность.
Когда вы переключаетесь с одного занятия на другое, продолжайте заканчивать предыдущее
Intent homeintent = new Intent(SampleActivity.this,SecondActivity.class); startActivity(homeintent); SampleActivity.this.finish();
user1180309 12 июн ’12 в 05:07 2012-06-12 05:07
2012-06-12 05:07
Прежде всего, этот подход требует минимального 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», если хотите.
Добавьте их к методу 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»));
user4569915 18 июн ’18 в 08:25 2018-06-18 08:25
2018-06-18 08:25
Ты можешь использовать finishAndRemoveTask () из API 21
public void finishAndRemoveTask ()
Завершает все действия в этой задаче и удаляет ее из списка недавних задач.
user748530 22 янв ’16 в 11:00 2016-01-22 11:00
2016-01-22 11:00
Это зависит от того, как быстро вы хотите закрыть приложение.
Безопасный способ закрыть ваше приложение — 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), запустите этот код и перезапустите приложение после его закрытия, вы столкнетесь с некоторым странным поведением, потому что бесконечный цикл все еще работает.
Источник: stackru.com
Код для закрытия программы
: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Пишем программу для закрытия процесса
Здравствуйте, начинающие и не очень программисты!
Сейчас я вам покажу очень простой способ закрытия любого приложения/задачи на C# (Csharp). Такие программы могут вам понадобится для сокращения времени, ну или говоря научным языком — автоматизации и последующей оптимизации закрытия процесса.
Итак, давайте приступим к нашему уроку, следуйте инструкциям, и тогда будет вам счастье!
1. Создаем новый проект в Microsoft Visual Studio (Ctrl+Shift+N).
2. Вставляем в наш проект компонент «Button»:
[ Ссылки могут видеть только зарегистрированные пользователи. ]
3. Кликаем на компонент «Button/Кнопка» 2 раза. Перед вами появится окно с кодом C#, вставьте туда это:
4. А теперь надо добавить маленький код в самое начало:
using System.Windows.Forms; using System.Diagnostics;
На этом все. Желаю удачного усвоения новых высот в C# и в целом программировании.
________________
![]() |
![]() |
![]() |
![]() |
16.05.2012, 21:15 | #2 |
Источник: zhyk.org Справочник по C# Если вы столкнулись с проблемой и хотите поделиться своим опытом, знаниями или у вас есть интересная статья с иностранного сайта, предложение новой темы, статью которую Вы хотите видеть в ближайшем будущем, расскажите нам об этом и мы обязательно поделимся этими знаниями со всеми. Возможно, для других ваши знания, опыт и советы окажутся очень ценными и помогут вовремя найти правильный выход или не совершить ошибок. Завершение работы процесса
//Немедленно останавливаем //выбранный процесс. clsProcess.Kill(); //Ждем завершения процесса. clsProcess.WaitForExit(); //Выполняем проверку если работающий системный процесс, //на который ссылается компонент //System.Diagnostics.Process, был завершен возвращаем true; //в противном случае — значение false. if (clsProcess.HasExited) return true; else return false; Методы «Kill» и «CloseMainWindow» можно вызывать только для процессов, выполняющихся на локальном компьютере. Для удаленного компьютера можно только просматривать информацию о процессах. Если метод «Kill» вызван во время закрытия текущего процесса, создается Win32Exception с описанием ошибки: «Доступ запрещен». Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на главную форму вашего проекта элементы управления «comboBox» и «button». Первый будет отвечать за вывод списка имен запущенных в данный момент процессов, а второй выполнять вызов метода закрытия выбранного процесса. У вас получится приведенный ниже пример. Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже код, вызова метода получения списка имен, запущенных процессов. ProcessList(); Перейдите в конструктор главной формы и сделайте двойной клик левой клавишей мыши по элементу управления «button1». Вы перейдете в редактор кода с автоматической установкой курсора в созданном методе «button1_Click», события «Click», возникающего при нажатии на кнопку. Добавьте приведенный ниже листинг, реализующий вызов метода «FindAndKillProcess», выполняющего поиск и завершение выбранного процесса в элементе управления «comboBox1». А так же возвращающего значение «true», если процесс был успешно завершён, иначе «false», с выводом информации о результате в сообщении. //Вызываем метод поиска и завершения выбранного процесса. if (FindAndKillProcess(comboBox1.Text)) < MessageBox.Show(«Процесс успешно завершён!», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Information); //Очищаем устаревший список процессов. comboBox1.Items.Clear(); //Очищаем поле ввода. comboBox1.Text = «»; //Загружаем новый. ProcessList(); >else MessageBox.Show(«Ошибка при завершении процесса.», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Error); Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма проекта с заполненным списком имен запущенных в данный момент процессов. Выберете из выпадающего списка, имя процесса, завершение работы которого вы хотите выполнить и нажмите на кнопку «Завершить». В случае если программе удастся или нет выполнить завершение, вы получите сообщение с соответствующей информацией. Пример №2 Данный пример описывает завершение процессов по идентификаторам или именам исполняемых файлов на локальной или удаленной системе с использованием команды «TASKKILL». Команда может использоваться в операционных системах Windows XP и старше.
try < System.Diagnostics.Process.Start(«taskkill», «/F /IM notepad++.exe* /T»); >catch (Exception msg_ex) Пример №3 В данном примере для завершения работы процесса используется Windows API функция «TerminateProcess» из библиотеки «Kernel32.lib». Функция не дает процессу ни малейшего шанса самому провести очистку, операционная система высвобождает все принадлежавшие ему ресурсы: возвращает себе выделенную им память, закрывает любые открытые файлы, уменьшает счетчики соответствующих объектов ядра и разрушает все его User- и GDI-объекты. [System.Runtime.InteropServices.DllImport(«kernel32.dll», SetLastError = true)] [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] static extern bool TerminateProcess(int hProcess, uint uExitCode); Параметр «hProcess» идентифицирует описатель завершаемого процесса, а в параметре «uExitCode» возвращается код завершения процесса. Пользуйтесь «TerminateProcess» лишь в том случае, когда иным способом завершить процесс не удается. Процесс не получает абсолютно никаких уведомлений о том, что он завершается, и приложение не может ни выполнить очистку, ни предотвратить свое неожиданное завершение (если оно, конечно, не использует механизмы защиты). При этом теряются все данные, которые процесс не успел переписать из памяти на диск. Для проверки завершения процесса, можно проверить свойство «HasExited», из класса «System.Diagnostics.Process». Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже код, вызова метода получения списка имен, запущенных процессов. ProcessList(); Перейдите в конструктор главной формы и сделайте двойной клик левой клавишей мыши по элементу управления «button1». Вы перейдете в редактор кода с автоматической установкой курсора в созданном методе «button1_Click», события «Click», возникающего при нажатии на кнопку. Добавьте приведенный ниже листинг, реализующий вызов функции «TerminateProcess». //Проходимся по всем процессам локального компьютера. foreach (System.Diagnostics.Process clsProcess in System.Diagnostics.Process.GetProcesses()) < //Определяем, совпадает ли начало имени процесса с указанным. //Если да, то метод «StartsWith» возвращает значение true //и вызывается метод удаления процесса, //в противном случае — значение false и происходит //переход к следующему процессу. if (clsProcess.ProcessName.StartsWith(comboBox1.Text)) < TerminateProcess((IntPtr)clsProcess.Id); if (clsProcess.HasExited) MessageBox.Show(«Процесс успешно завершён!», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show(«Ошибка при завершении процесса.», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Error); >> Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма проекта с заполненным списком имен запущенных в данный момент процессов. Выберете из выпадающего списка, имя процесса, завершение работы которого вы хотите выполнить и нажмите на кнопку «Завершить». В случае если программе удастся или нет выполнить завершение, вы получите сообщение с соответствующей информацией. Источник: csharpsourescode.blogspot.com |