на iOS 7+, как заставить операцию загрузки выполняться системой, а не приложением?

Я хочу протестировать фоновую загрузку больших файлов в приложениях iOS 7+.

Я использую NSURLSession с фоновой конфигурацией, как описано в Документация Apple по фоновому выполнению.

В документации говорится, что «после настройки ваш объект NSURLSession легко передает задачи загрузки и выгрузки в систему в соответствующее время».

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

Однако это не так. Вместо этого загрузка завершается под контролем приложения.

Важно

- (void)application:(UIApplication *)application
handleEventsForBackgroundURLSession:(NSString *)identifier
  completionHandler:(void (^)(void))completionHandler

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

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

Будем признательны за мысли о способах принудительной передачи фоновых загрузок в систему.


person Geoff S    schedule 15.06.2016    source источник


Ответы (1)


Никакой "передачи" нет. Каждая задача в фоновом сеансе всегда выполняется в отдельном процессе, и точка.

Однако метод application:handleEventsForBackgroundURLSession:completionHandler: работает только в том случае, если ваше приложение завершается операционной системой (не пользователем) во время загрузки. Если это произойдет, ваше приложение перезапустится в фоновом режиме после завершения загрузки.

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

person dgatwood    schedule 25.07.2016