Обработка большого количества запросов API в приложении iOS (без использования Alamofire) - PullRequest
0 голосов
/ 22 сентября 2018

Как обрабатывать состояния, в которых приложение переходит на передний план, устанавливая количество запросов (минимум 3-4), потому что эта информация требуется в приложении, а затем отправляется в фоновый режим?

ЧтоЯ попытался использовать RequestManager для suspend URLSessionDataTasks, когда приложение переходит в фоновый режим, а когда приложение возобновляет работу, resume эти задачи снова.Но я не вижу, что это работает очень хорошо.

Есть ли стандартный способ сделать это?

1 Ответ

0 голосов
/ 27 сентября 2018

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

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

Если вы абсолютно должны избегать загрузки во время приложениянаходится в фоновом режиме (почему?), вы можете создать задачу загрузки на переднем или фоновом сеансе, а затем остановить задачи загрузки, вызвав cancelByProducingResumeData:, когда ваше приложение станет фоновым.Позже вы можете продолжить запрос, позвонив по номеру downloadTaskWithResumeData:.

. При таком подходе существует довольно большая оговорка, заключающаяся в том, что части данных возобновления API не так хорошо протестированы, как фоновая загрузка.части.Показательный пример: в каждой версии iOS 10 от первой бета-версии до 10.2 поддержка данных возобновления была полностью прервана.(Существует довольно ужасающий обходной путь , если вы решите пойти по этому пути.)

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

...