NSUrlSession продолжает передачу файла, если приложение убито из диспетчера задач?
Я пробовал различные образцы из Интернета (последний из которых этот), чтобы лучше понять NSUrlSession
,
То, что я надеялся увидеть: загрузка файлов будет продолжаться, даже если приложение, которое их вызвало, будет убито (например, пользователем через диспетчер задач). Однако этого не происходит.
Это проблема конфигурации или передача фонового файла не работает, если приложение закрывается? Я думал, что вся идея была в том, что iOS перезапустит приложение.
2 ответа
Нет - приложение не перезапускается для фоновой загрузки, когда пользователь принудительно завершает работу.
Документация iOS8 для приложения: didReceiveRemoteNotification: fetchCompletionHandler: говорит:
Используйте этот метод для обработки входящих удаленных уведомлений для вашего приложения. В отличие от метода application:didReceiveRemoteNotification:, который вызывается только тогда, когда ваше приложение выполняется на переднем плане, система вызывает этот метод, когда ваше приложение работает на переднем плане или в фоновом режиме. Кроме того, если вы включили фоновый режим удаленных уведомлений, система запускает ваше приложение (или выводит его из приостановленного состояния) и переводит его в фоновое состояние при получении push-уведомления. Однако система не запускает ваше приложение автоматически, если пользователь принудительно завершил его. В этой ситуации пользователь должен перезапустить ваше приложение или перезапустить устройство, прежде чем система попытается снова запустить ваше приложение автоматически.
Если система убивает ваше приложение, и ваш фоновый сеанс имеет активные загрузки, ваши загрузки будут продолжены, и система запустит ваше приложение после завершения загрузки. Однако, если пользователь принудительно покинет ваше приложение, все задачи будут отменены.
Документация для backgroundSessionConfigurationWithIdentifier:
Если приложение iOS завершается системой и перезапускается, приложение может использовать тот же идентификатор для создания нового объекта конфигурации и сеанса и получения статуса передач, которые выполнялись в момент завершения. Это поведение применяется только для нормального завершения приложения системой. Если пользователь закрывает приложение с экрана многозадачности, система отменяет все фоновые передачи сеанса. Кроме того, система не запускает автоматически приложения, которые были принудительно закрыты пользователем. Пользователь должен явно перезапустить приложение, прежде чем передача может начаться снова.