Выход из приложения в iOS 4.0 - PullRequest
33 голосов
/ 23 июня 2010

До того, как iOS4.0 нажал кнопку «Домой» на iPhone, выйдет из приложения, и Apple в своем руководстве указала, что программный выход из приложения не был принят.

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

теперь нормально с яблоком?и как это можно сделать?

Ответы [ 11 ]

50 голосов
/ 23 июня 2010

Вы можете установить ключ Info.plist UIApplicationExitsOnSuspend, чтобы приложение полностью закрылось.

22 голосов
/ 23 июня 2010

Нет, все равно не следует этого делать.

У вас есть обработчики для разных этапов, так что вот как вы должны это сделать.Нет смысла выходить вручную.Если вы перезапустите приложение, в идеале оно начнется с того места, где вы остановились, поэтому это либо возобновление, либо запуск и загрузка старого состояния.

Нет причин для выхода.

Редактировать

Как это снова появляется: Рекомендации по интерфейсу iOS для пользователя говорит: "ДонВыйти программно ".И в прошлом мы видели много отчетов о приложениях, в которых были вызовы exit ().

Выход вместо приостановки путем установки соответствующего ключа в файле Info.plist, конечно, прекрасно, ноэто не выделенная кнопка пользовательского интерфейса, а конкретная прикладная реализация программы выхода кнопкой home.

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

Есть причина для программного запуска exit().

Предположим, у вас есть приложение voip, которое всегда запускается при загрузке и перезапускается при уничтожении системой, например когда предупреждение памяти происходит. Обычно это предпочтительное поведение, потому что вам нужно работать в фоновом режиме, чтобы поддерживать ваши VoIP TCP сокеты.

Однако, если приложение поддерживает несколько режимов работы - например, а) работать в фоновом режиме, используя TCP, и б) не запускать в фоновом режиме, а запускать только после принятия уведомления PUSH - если пользователь использует приложение в режиме б) ему не кажется, что приложение потребляет память, которую можно использовать для других приложений.

Так что было бы неплохо, если бы приложение могло при запуске проверить, запускается ли оно в фоновом режиме, и пользователь хочет, чтобы приложение работало в режиме б) и корректно exit(0), чтобы оно больше не перезапускалось автоматически.

6 голосов
/ 19 марта 2011

Также см. Магия отладки iOS (Техническое примечание TN2239) :

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

Находясь на теме определения причины преждевременного выхода, Понимание и анализ отчетов о сбоях приложений iPhone OS (Техническое примечание TN2151) может представлять интерес.

Извините, что немного отошел от темы, но это касается ранних выходов и диагностики.

Jeff

3 голосов
/ 11 декабря 2012

Вот шаги для ответа @Joost Schuur:

  1. Откройте ваш info.plist файл

  2. Добавить ключ UIApplicationExitsOnSuspend или Выбрать приложение не работает в фоновом режиме

  3. Установить новый ключ на ДА или Заполнить поле для отметки

Точки останова в applicationWillResignActive и applicationWillTerminate покажут, что это работает.

3 голосов
/ 17 августа 2011

Вы всегда можете использовать exit(1).Это необработанный / принудительный выход с целым числом для кода / причины.Вы можете использовать это во время разработки, как в режиме симуляции, когда вы просто хотите завершить;как в СЕЙЧАС.

3 голосов
/ 05 июля 2010

У меня была настоящая проблема с этим.Выход из программы вручную или программно имеет большой смысл.

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

Когда приложение в фоновом режиме приостанавливается на iPhone OS4, приложение возвращается с того места, на котором оно было отключено (т.е. показывает тот же экрангде бы пользователь ни находился) и никогда не изменяет его состояние, потому что applicationWillTerminate теперь никогда не вызывается.

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

Поскольку установка UIApplicationExitsOnSuspend = YES дает только один способ (то есть он всегда завершается при нажатии на HOME), этоэто не решение, которое я ищу.

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

Чтобы сделать это, я должен иметь возможность завершить работу приложения и выписать состояние после завершения использования.ПоследовательностьВ других случаях я просто хочу, чтобы приложение было приостановлено.

Если вы дважды нажмете кнопку HOME, вы увидите приостановленные приложения.Я могу удалить (закрыть) свое приложение, дотронувшись до него дольше и коснувшись появившегося символа (-), но это не так интуитивно понятно для пользователей и слишком много шагов.

Другой вариант - использовать кнопку «Выход» в качестве одной из навигационных вкладок в моем приложении, но это ужасно.На данный момент мой единственный вариант - установить UIApplicationExitsOnSuspend = YES.

0 голосов
/ 04 июня 2019

Просто используйте метод ниже, чтобы изящно выйти с анимацией

   @IBAction func MinimizeOrKillApp(){            
        UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
        //Comment if you want to minimise app
        Timer.scheduledTimer(withTimeInterval: 0.2, repeats: false) { (timer) in
            exit(0)
        }
    }

Output

Загрузить пример кода

Это не рекомендуется, и ваше приложение будет отклонено?.Мы все разработчики, и мы знаем, как это одобрить от команды рецензентов

Вопрос разработчика Apple

0 голосов
/ 22 августа 2018

Вы можете сделать это:

@IBAction func yourButtonAcation(_ sender: Any) {

    UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)

}
0 голосов
/ 07 апреля 2013

Ты не должен этого делать. Когда пользователь захочет выйти из вашего приложения, он нажмет кнопку HOME.

Когда пользователь нажимает кнопку «Домой», вы получаете уведомление UIApplicationWillResignActiveNotification. Используйте это уведомление, чтобы разрушить все ваши ресурсы.

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

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