2016-03-11 3 views
3

У меня есть прототип однозадачного приложения, которое контролирует задачи загрузки.Мониторинг NSURLSession после перезагрузки приложения

enter image description here

Я пытаюсь справиться с следующим прецедентом:

  1. Загрузки инициируются через NSURLSession в то время как приложение находится на переднем плане. NSURLSession создается с настройкой фона.
  2. Я убью приложение с помощью «Xcode Stop», чтобы приложение продолжало загружать в фоновом режиме. В то время как приложение активно, я регулярно получаю обратные вызовы прогресса из NSURLSession.
  3. Я вручную запустил приложение (а не Xcode, но нажав значок запуска), когда загрузки еще не завершены.
  4. Я не получаю вызовы делегатов URLSession для задач, запущенных в предыдущем приложении. Единственное, что вызывается, это handleEventsForBackgroundURLSession, но это вызвано AppDelegate ОС (в другом случае, чем вызовы делегатов NSURLSession).

Я хочу показать ход текущих задач загрузки. Это можно сделать после перезагрузки приложения (когда приложение было прервано системой, а не вручную!)?

После перезагрузки приложения NSURLSession инициализируется с тем же идентификатором, новым объектом делегирования, поэтому я решил, что делегат продолжит принимать вызовы для задач сеанса (поскольку идентификатор сеанса один и тот же), но, видимо, это не так. Существует примечание в документации Apple:

Объект сеанса держит сильную ссылку на делегат, пока приложение явно обесценивает сессию. Если вы не сделаете недействительным сеанс, ваше приложение потеряет память.

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

+0

эй, в этом «BG Transfer Demo», вы достигли возобновления загрузки после удаления приложения с backhround ??? –

+1

Я не возобновляю загрузку, если приложение было вручную (пользователем) удалено из фона. Когда это произойдет, iOS, вероятно, отменяет сеансы URL. После перезапуска приложения вы можете вручную проверить состояние ваших задач и выполнить правильные действия. Если хотите, я могу отправить вам «BG Transfer Demo» или загрузить в какой-то репозиторий для проверки. – mixtly87

+0

Да, пожалуйста, пришлите мне демо на мой идентификатор gmail. 'patelmonika006 @ gmail.com' & ' patelmonika0612 @ gmail.com' Спасибо заранее. –

ответ

0

NSURLSession Убедитесь правильно инициализирован, когда запуски приложения. Вот в чем проблема в моем случае. У меня был TransferManager, который инициализировал сеанс как ленивый getter, который не вызывался ...

Неправильно инициализирован NSURLSession, обратные вызовы запускаются регулярно.

Глупая ошибка, но это не так.

0

Ваша цель, кажется, в номере 4, пытаясь получить обратные вызовы делегатов URLSession, находясь в фоновом режиме. Я боролся с этим сам и не смог найти отличное решение, однако я действительно понимал, что всякий раз, когда я выполнял какие-либо действия (даже просто вызывал обратный вызов completeHandler()) в handleEventsForBackgroundURLSession: Я получил звонок до

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task 
didCompleteWithError:(NSError *)error { 

Похоже, что выполнение операций может разбудить делегат, указанный при создании NSURLSession.

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

Кроме того, это может быть какой-то помочь вам: My NSURLSessionDelegate methods are not getting called during a background download

+0

У меня нет проблем с получением обратных вызовов в фоновом режиме. Проблема в том, что я не могу получить обратные вызовы обновления обновления после перезагрузки приложения (приложение может быть убито iOS из-за нехватки памяти или сбой, в любом случае iOS продолжит сеанс загрузки фона). Поэтому, если пользователь перезапустит приложение, я не могу обновить индикаторы выполнения для него в представлении прогресса. – mixtly87

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