2015-10-20 2 views
0

Когда мое приложение работает на переднем плане я вижу, периодические призывы: NSURLSessionDownloadDelegate -> URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:Как узнать, работает ли NSURLSessionDownloadTask, когда приложение приостановлено?

Когда мои приложения перемещаются на фон и приостанавливаются, вызовы этого метода остановки, так что я не имею обратную связи по ли NSURLSessionDownloadTask продолжает скачивание , Существуют ли какие-либо методы для получения некоторых отзывов о загрузке?

ответ

1

От взгляда на другие сообщения StackOverflow около NSURLSessionDownloadTask есть много путаницы. Вот механизмы обратной связи я обнажение:

  • использовать сетевой прокси и анализатор пакетов, как Wireshark (см this для более подробной информации). Отфильтруйте весь трафик, кроме трафика, на/с сервера, с которого вы загружаете файл. Найдите FIN, ACK, чтобы сообщить, что загрузка завершена. Вы также можете использовать пакетный сниффер для диагностики проблем с загрузкой. Wireshark

Wireshark

  • использование Instruments для захвата сетевого трафика для процесса nsurlsessiond

Instruments capture for nsurlsessiond

  • использование Xcode Window->Devices->Download Container загрузить приложение с телефона Дурин g скачать фоновый рисунок. Вы найдете кешированную версию частично загруженного файла в: /Library/Caches/com.apple.nsurlsessiond/Downloads/[id]/CFNetworkDownload_...tmp, где [id] - уникальный идентификатор, который вы указали при создании объекта NSURLSessionConfiguration. Размер кеширования увеличивается во время загрузки фона, поэтому вы можете загрузить контейнер несколько раз, чтобы убедиться, что процесс загрузки продолжается. После завершения загрузки кешированная версия будет удалена.

  • wait Загрузка. Если ваше приложение находится в фоновом режиме и приостановлено, когда загрузка завершена, iOS перемещает ваше приложение из приостановленного состояния в активное состояние в фоновом режиме и вызывает следующие методы в следующем порядке:

  • через UIApplicationDelegate -> handleEventsForBackgroundURLSession в приложении AppDelegate, который запускает вызов из completionHandler() метода

  • через 'NSURLSessionDownloadTaskDelegate -> URLSession: downloadTask: didFinishDownloadingToURL:'
  • с помощью NSURLSessionTaskDelegate -> NSURLSession:task:didCompleteWithError:
  • с помощью NSURLSessionDelegate -> :URLSessionDidFinishEventsForBackgroundURLSession:
  • IOS дает приложение 30 секунд Всего для обработки конца загрузки в фоновом режиме до приостановки применения

Я также поставил очень простой пример приложения NSURLSessionDownload на GitHub here.

Смежные вопросы