Код для закрытия программы

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

  1. System.runFinalizersOnExit(true)
    (ИЛИ ЖЕ)
  2. 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() , Очевидно, что вы можете иметь более одного вида деятельности и т. Д., Но это не главное. Позволяет управлять некоторыми из вариантов использования

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

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

user546999 13 июн ’11 в 12:13 2011-06-13 12:13
2011-06-13 12:13

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

Читайте также:
Почему прекращена работа программы csgo exe

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

Код для закрытия программы

sharperok никому не известный тип

: 3

Популярность: 10

Сказал(а) спасибо: 0

Поблагодарили 0 раз(а) в 0 сообщениях

Отправить сообщение для sharperok с помощью Telegram

Пишем программу для закрытия процесса

Здравствуйте, начинающие и не очень программисты!
Сейчас я вам покажу очень простой способ закрытия любого приложения/задачи на 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#

Если вы столкнулись с проблемой и хотите поделиться своим опытом, знаниями или у вас есть интересная статья с иностранного сайта, предложение новой темы, статью которую Вы хотите видеть в ближайшем будущем, расскажите нам об этом и мы обязательно поделимся этими знаниями со всеми. Возможно, для других ваши знания, опыт и советы окажутся очень ценными и помогут вовремя найти правильный выход или не совершить ошибок.
Так же если у вас есть предложение о сотрудничестве, пожелания, указать на нарушения сайта или просто сказать слова благодарности, все это вы можете сделать через форму обратной связи. Читать дальше

Завершение работы процесса

  • Пример №1 – использование метода «Kill» из класса «System.Diagnostics»;
  • Пример №2 – завершение процессов по идентификаторам или именам исполняемых файлов на локальной или удаленной системе с использованием команды «TASKKILL»;
  • Пример №3 – использование Windows API функции «TerminateProcess» из библиотеки «Kernel32.lib».

//Немедленно останавливаем //выбранный процесс. 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();
Так же добавьте приведённый ниже код самого метода «ProcessList».
private void ProcessList() < //Получаем массив типа System.Diagnostics.Process, //предоставляющий данные обо всех процессах, //выполняющегося на локальном компьютере. System.Diagnostics.Process[] processlist = System.Diagnostics.Process.GetProcesses(); //Выполняем поиск всех процессов в полученном массиве //и добавляем их имена в элемент управления comboBox1. foreach(System.Diagnostics.Process theprocess in processlist) < //Добавляем имя текущего процесса //в элемент управления comboBox1. comboBox1.Items.Add(theprocess.ProcessName); >>

Перейдите в конструктор главной формы и сделайте двойной клик левой клавишей мыши по элементу управления «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);
Добавьте приведенный ниже код метода «FindAndKillProcess» в листинг главной формы.
public bool FindAndKillProcess(string name) < try < //Проходимся по всем процессам локального компьютера. foreach (System.Diagnostics.Process clsProcess in System.Diagnostics.Process.GetProcesses()) < //Определяем, совпадает ли начало имени процесса с указанным. //Если да, то метод «StartsWith» возвращает значение true //и вызывается метод удаления процесса, //в противном случае — значение false и происходит //переход к следующему процессу. if (clsProcess.ProcessName.StartsWith(name)) < //Немедленно останавливаем //выбранный процесс. clsProcess.Kill(); //Ждем завершения процесса. clsProcess.WaitForExit(); //Выполняем проверку если работающий системный процесс, //на который ссылается компонент //System.Diagnostics.Process, был завершен возвращаем true; //в противном случае — значение false. if (clsProcess.HasExited) return true; else return false; >> //Если процесс не был найден //возвращаем false. return false; > catch (Exception) < //При получении ошибок //возвращаем false. return false; >>

Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма проекта с заполненным списком имен запущенных в данный момент процессов.

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

Пример №2

Данный пример описывает завершение процессов по идентификаторам или именам исполняемых файлов на локальной или удаленной системе с использованием команды «TASKKILL». Команда может использоваться в операционных системах Windows XP и старше.

  • /F — Принудительное завершение процесса.
  • /IM — Имя образа процесса, который требуется завершить. Знак подстановки «*» может быть использован для указания всех заданий или имен образов.
  • /T — Завершение указанного процесса и всех его дочерних процессов.
  • TASKKILL /IM notepad++.exe — завершение процесса, исполняемым образом которого является notepad.exe++. Если таких процессов более одного — то будут завершены все;
  • TASKKILL /PID 1568 /T — завершить процесс с идентификатором 1568 и все его дочерние процессы (/T) . Одной командой можно завершить несколько процессов, задавая их PID — taskkill /PID 1568 /PID 1569 /PID 1570;
  • TASKKILL /F /FI «PID ge 2015» /FI «WINDOWTITLE eq Arc*» — принудительно (/F) завершить процесс, идентификатор которого больше или равен 2000 и заголовок окна которого , начинается с текста Arc;
  • TASKKILL /F /FI «USERNAME eq NT AUTHORITYSYSTEM» /IM notepad++.exe — принудительно завершить процесс, выполняющийся в контексте учетной записи NT AUTHORITYSYSTEM и исполняемый файл которого имеет имя notepad.exe++;
  • TASKKILL /S 192.168.1.105 /U MyDomainuser /FI «USERNAME ne NT*» /IM * — завершить все процессы, выполняющиеся в контекстах учетных записей, не начинающихся со строки NT на компьютере с IP-адресом 192.168.0.243. При подключении к удаленной системе используется имя пользователя user в домене Mydomain. Пароль не задан и будет запрошен при выполнении команды;
  • TASKKILL /S SERVER /U MydomainUser /P UserPass /FI «IMAGENAME eq note*» — завершить все процессы, имя исполняемого файла которых начинается со строки note на удаленном компьютере с именем SERVER.

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».
Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на главную форму вашего проекта элементы управления «comboBox» и «button». Первый будет отвечать за вывод списка имен запущенных в данный момент процессов, а второй выполнять вызов метода закрытия выбранного процесса. У вас получится приведенный ниже пример.

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

ProcessList();
Так же добавьте приведённый ниже код самого метода «ProcessList».
private void ProcessList() < //Получаем массив типа System.Diagnostics.Process, //предоставляющий данные обо всех процессах, //выполняющегося на локальном компьютере. System.Diagnostics.Process[] processlist = System.Diagnostics.Process.GetProcesses(); //Выполняем поиск всех процессов в полученном массиве //и добавляем их имена в элемент управления comboBox1. foreach(System.Diagnostics.Process theprocess in processlist) < //Добавляем имя текущего процесса //в элемент управления comboBox1. comboBox1.Items.Add(theprocess.ProcessName); >>

Перейдите в конструктор главной формы и сделайте двойной клик левой клавишей мыши по элементу управления «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); >>
Так же добавьте приведенный ниже листинг загрузки и вызова API функций.
[System.Runtime.InteropServices.DllImport(«kernel32.dll», SetLastError = true)] static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, IntPtr dwProcessId); [System.Runtime.InteropServices.DllImport(«kernel32.dll», SetLastError = true)] [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject); [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); const uint PROCESS_TERMINATE = 0x1; private void TerminateProcess(IntPtr PID)

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

Источник: csharpsourescode.blogspot.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru