Какая польза от executeFetchWithCompletionHandler в делегате приложения?
Я немного запутался с тем, как performFetchWithcompletionHandler
занимается жизненным циклом приложения для iOS. В документах упоминается, что это дает нам 30 секунд для загрузки любых данных, но будет ли наше приложение зависать на 30 секунд в это время?
2 ответа
... будет ли наше приложение зависать на 30 секунд в это время?
Нет, с точностью до наоборот. Этот метод вызывается, когда ваше приложение приостановлено, но ОС позволит вам проверить данные для извлечения. Итак, ваше приложение будет пробуждено, запущено в фоновом режиме, и будет вызван этот метод, после чего вы можете выполнить быструю выборку (не более 30 секунд), чтобы проверить, есть ли какие-либо данные для извлечения. Когда вы закончите обработку вашей быстрой выборки, вы вызываете обработчик завершения, чтобы сообщить ОС, что вы сделали, и что ваше приложение можно снова безопасно приостановить.
Если, однако, вам не удастся выполнить запрос в течение 30 секунд, ваше приложение может быть временно прекращено и не будет участвовать в будущих фоновых выборках. Поэтому важно закончить в отведенное время.
Как говорят в документах:
Реализуйте этот метод, если ваше приложение поддерживает режим выборки в фоновом режиме. Когда появляется возможность загрузить данные, система вызывает этот метод, чтобы дать вашему приложению возможность загрузить любые необходимые данные. Ваша реализация этого метода должна загрузить данные, подготовить эти данные для использования и вызвать блок в
completionHandler
параметр.Когда вызывается этот метод, ваше приложение имеет до 30 секунд времени настенного времени для выполнения операции загрузки и вызова указанного блока обработчика завершения. На практике ваше приложение должно вызывать блок обработчика завершения как можно скорее после загрузки необходимых данных. Если вы вовремя не вызовете обработчик завершения, ваше приложение будет закрыто. Что еще более важно, система использует истекшее время для расчета энергопотребления и стоимости данных для фоновых загрузок вашего приложения. Если вашему приложению требуется много времени для вызова обработчика завершения, ему может быть предоставлено меньше возможностей для получения данных в будущем. Для получения дополнительной информации о поддержке фоновых операций выборки посмотрите Фоновое выполнение в Руководстве по программированию приложения для iOS.
Это касается фоновой выборки, например, когда приложение получает тихие уведомления. В этом случае iOS запускает приложение в фоновом режиме в течение максимум 30 секунд. и делать вещи в соответствии с кодом писателя и убить приложение. Таким образом, пользователь не будет знать об этом.
Не рекомендуется писать сложную логику в этом методе performFetchWithcompletionHandler
, Причиной является ограничение по времени (30 секунд), и разработчик приложения не может его контролировать.
Чтобы получить эту работу, background mode
должен быть включен в capabilities
проекта.
Одним из примеров этого является молчаливое push-уведомление (полезные данные уведомлений имеют ключ content-available = 1
)
Для более подробной информации см. Это