Завершит ли ios приложение, работающее в фоновом режиме, через определенное время?

Я использую базовую структуру местоположения внутри своего приложения, и я устанавливаю строку местоположения в UIBackgroundMode или обязательных фоновых режимах (в Xcode 4.2) для получения обновленного местоположения из метода didUpdateToLocation, когда приложение работает в фоновом режиме, а также отправляет это обновленное местоположение на сервер, нажав конкретная ссылка внутри didUpdateToLocation метода основной структуры местоположения.

Мой вопрос в том, будет ли приложение закрыто через некоторое время при работе в фоновом режиме или нет?


person iosuser    schedule 07.06.2012    source источник


Ответы (5)


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

В документации для разработчиков четко указано - "Система держит приостановленные приложения в памяти как можно дольше, удаляя их только тогда, когда объем свободной памяти становится низким. Оставление в памяти означает, что последующие запуски вашего приложения будут намного быстрее".

Просмотрите это для получения полной информации - http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

person rishi    schedule 07.06.2012
comment
Спасибо, и эта ссылка очень полезна. И еще один вопрос, который я хочу задать, потребуется ли нам какая-либо обработка событий внутри метода didUpdateToLocation, потому что в данном документе по приведенной выше ссылке указано, что Sleep когда не обрабатывает события, когда приложение находится в фоновом состоянии. - person iosuser; 07.06.2012
comment
если вы заинтересованы в получении местоположения, даже если оно находится в спящем режиме, вам нужно использовать это, иначе ничего конкретного. - person rishi; 07.06.2012
comment
Когда приложение переходит в спящий режим? - person iosuser; 07.06.2012
comment
в документации указано, что UIBackgroundMode(location) будет уведомлять приложение, когда местоположение обновляется, когда приложение находится в фоновом режиме. Я думаю, что если приложение спит и обновляет местоположение, затем приложение уведомляется, и оно снова переходит в фоновое состояние, я правда? - person iosuser; 07.06.2012
comment
Вы можете использовать службу значительного изменения местоположения для обновления местоположения в фоновом режиме, а также в состоянии уничтожения. Пожалуйста, обратитесь к руководству Apple Document для SCLS. - person Sandip Patel - SM; 29.05.2017

Я уверен, что это бесполезно для автора, потому что вопрос был задан в июне 2012 года, а я даю ответ в июне 2019 года. Этот ответ может быть полезен для других пользователей.

Я публикую этот ответ, потому что все говорят, что это поведение ОС по умолчанию, и мы не можем его изменить....бла....бла.

Недавно я работал с тем же требованием. После 2-3 недель упорной работы я это сделал. Для других пользователей я создаю вспомогательный класс. Мое приложение никогда не будет уничтожено ОС, пока не будет включено отслеживание местоположения.

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

Используйте HSLocationManager для неограниченного отслеживания местоположения в активном и неактивном состоянии.

Обратитесь к моему приложению, которое доступно в магазине приложений (приложение никогда не убьет ОС, если включено отслеживание местоположения)

Менеджер местоположения, который позволяет получать фоновые обновления местоположения каждые n секунд с желаемой точностью местоположения.

Преимущество:

  • ОС никогда не убьет наше приложение, если в данный момент работает диспетчер местоположений.

  • Дайте периодическое обновление местоположения, когда это необходимо (диапазон составляет от 2 до 170 секунд (ограничено максимально допустимым временем фоновой задачи))

  • Настраиваемая точность определения местоположения и период времени.

  • Низкое потребление памяти (класс Singleton)

person Hitesh Surani    schedule 04.06.2019
comment
Спасибо, что поделились этим. Работая над аналогичной функциональностью, вы преобразовали свой код в библиотеку, которую можно использовать при разработке кроссплатформенных приложений. Ты мой друг легенда. Это требует больше голосов - person KingNDj; 13.10.2019
comment
Интересное использование для фоновых обновлений местоположения. Интересно, почему у этого нет больше голосов - person Lance Samaria; 12.06.2020

Приложение для iOS может быть закрыто по следующим причинам:

  1. Время ожидания сторожевого таймера

Как вы, наверное, знаете, начиная с iOS 4.x, большую часть времени, когда вы выходите из приложения iOS, приложение не закрывается, а вместо этого отправляется в фоновый режим.

However, there are times when the OS will terminate your app and
generate a crash log if the app didn’t respond fast enough. These
events correspond with the implementation of the following
UIApplicationDelegate methods:

   - application:didFinishLaunchingWithOptions:
   - applicationWillResignActive:
   - applicationDidEnterBackground:
   - applicationWillEnterForeground:
   - applicationDidBecomeActive:
   - applicationWillTerminate:

Во всех вышеперечисленных методах приложение получает ограниченное количество времени для завершения обработки. Если приложение занимает слишком много времени, ОС завершит работу приложения.

  1. Принудительный выход пользователя

iOS 4.x поддерживает многозадачность. Если приложение блокирует пользовательский интерфейс и перестает отвечать на запросы, пользователь может дважды нажать кнопку «Домой» на главном экране и закрыть приложение.

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

Обычно у приложения есть около 10 минут, чтобы оставаться в фоновом режиме после того, как пользователь нажимает кнопку «Домой», а затем оно автоматически закрывается ОС. Таким образом, список приложений, которые вы видите, дважды нажав кнопку «Домой», — это только список прошлых запусков приложений.

  1. Завершение работы при нехватке памяти

При создании подкласса UIViewController вы могли заметить метод didReceiveMemoryWarning.

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

Когда общее потребление памяти достигает определенного уровня, ОС отправляет уведомление UIApplicationDidReceiveMemoryWarningNotification. В то же время для приложения вызывается didReceiveMemoryWarning.

На этом этапе, чтобы ваше приложение продолжало работать должным образом, ОС начинает завершать работу приложений в фоновом режиме, чтобы освободить часть памяти. После завершения работы всех фоновых приложений, если вашему приложению по-прежнему требуется больше памяти, ОС завершает работу вашего приложения.

person Akshay Sunderwani    schedule 17.02.2015

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

Но если я добавлю это в iOS6, приложение не завершится

[locationManager setPausesLocationUpdatesAutomatically:NO];
person Daniel Nord    schedule 03.01.2013
comment
Помните, что вы обходите оптимизацию. Вместе с ActivityType система разумно перестанет передавать данные о местоположении в ваше приложение (если вы установили Fitness ActivityType и не двигаетесь более пары минут, приостановите усилия устройства, чтобы отслеживать вас, пока вы не начнете двигаться). опять же...), это также означает, что радиоприемники отключены, что экономит заряд батареи. Он действительно продолжит доставлять данные о местоположении, если вы настроите диспетчер никогда не приостанавливать, но в этом случае вы, скорее всего, будете прерваны iOS раньше, поскольку устройство выполняет больше работы. - person Daniel; 06.11.2014

Быстрый ответ - почти нет. Читайте ниже, хотя для более подробной информации.

Поскольку на устройствах iOS включена многозадачность, а) ваше приложение получает выделенный объем памяти и б) устройство ограничивает количество задач, то есть приложений, использующих память, которые выполняются в любой момент времени. Если вы возьмете устройство iOS и откроете несколько приложений, вы начнете замечать, что приложение, которое вы открыли первым, возможно, было завершено и перезагружено из папки viewDidLoad.

Как правило, можно с уверенностью сказать, что если ваше приложение открыто недавно (или даже на телефоне, где кто-то часто очищает меню многозадачности), устройство не завершит ваше приложение в фоновом режиме.

person erran    schedule 07.06.2012