Какая польза от executeFetchWithCompletionHandler в делегате приложения? - PullRequest
0 голосов
/ 07 февраля 2019

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

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

... будет ли наше приложение зависать на 30 секунд в это время?

Нет, с точностью до наоборот.Этот метод вызывается, когда ваше приложение приостановлено, но ОС позволит вам проверить данные для извлечения.Итак, ваше приложение будет пробуждено, запущено в фоновом режиме, и будет вызван этот метод, после чего вы можете выполнить быструю выборку (не более 30 секунд), чтобы проверить, есть ли какие-либо данные для извлечения.Когда вы закончите обработку вашей быстрой выборки, вы вызываете обработчик завершения, чтобы сообщить ОС, что вы закончили и что ваше приложение можно снова безопасно приостановить.

Если, тем не менее, вам не удастся завершитьзапрос в течение 30 секунд, ваше приложение может быть окончательно завершено и не участвовать в будущих фоновых выборках.Поэтому важно закончить в отведенное время.


Как документы говорят:

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

Когда этот метод вызывается, ваше приложение имеет до 30 секунд настенных часов.время выполнить операцию загрузки и вызвать указанный блок обработчика завершения.На практике ваше приложение должно вызывать блок обработчика завершения как можно скорее после загрузки необходимых данных.Если вы вовремя не вызовете обработчик завершения, ваше приложение будет закрыто.Что еще более важно, система использует истекшее время для расчета энергопотребления и стоимости данных для фоновых загрузок вашего приложения.Если вашему приложению требуется много времени для вызова обработчика завершения, ему может быть предоставлено меньше возможностей для получения данных в будущем.Для получения дополнительной информации о поддержке операций фоновой выборки см. Фоновое выполнение в Руководство по программированию приложений для iOS .

0 голосов
/ 07 февраля 2019

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

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

Чтобы получить эту работу, background mode должен быть включен в capabilities проекта.

Одним из примеров этого является тихое push-уведомление (полезная нагрузка уведомления имеет ключ content-available = 1)

Для получения более подробной информации см. Это

...