NSTimer, NSUrlConnection, NSThread поведение, когда приложение находится в фоновом состоянии - PullRequest
0 голосов
/ 13 марта 2012

Team,

Я занимаюсь разработкой приложения для iOS.Мое требование - запрашивать определенную службу новостей (REST API) через регулярные промежутки времени. Я хотел запросить службу дважды в день и обновить базу данных sqllite, даже если приложение находится в фоновом состоянии.Мой пользовательский интерфейс будет обновлен данными, извлеченными из sqllite db, в то время как приложение находится на переднем плане.

Мой вопрос:

  1. Можно ли непрерывно запускать NSTimer в фоновом режиме?если да, есть ли максимальный лимит времени для работы таймера в фоновом режиме (скажем, 10 минут или 60 минут)?

  2. Можно ли отправить запрос на загрузку файла с помощью NSUrlConnection и сохранить файл в каталоге документов, когда приложение находится в фоновом режиме?

Ваши предложения будут очень полезны для разработки моего проекта.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 августа 2012

Отвечая на мой собственный вопрос, чтобы он был полезен другим.

Вопрос 1: Можно ли непрерывно запускать NSTimer в фоновом режиме?

Ans: Nstimer не будет работать, пока приложение находится в фоновом состоянии.Таким образом, нет точки максимально допустимого значения таймера в фоновом режиме.Если приложение входит в фоновый режим во время продолжающегося процесса, [UIApplication beginBackgroundTaskWithExpirationHandler:] можно использовать для завершения текущего процесса.Максимальное время, предоставляемое ОС для этого обработчика, составляет 10 минут.

Ques 2: можно ли отправить запрос на загрузку файла с помощью NSUrlConnection и сохранить файл в каталоге документов, когда приложение находится вфон?

Ответ: Ниже приведена информация из документации Apple.Подробная информация найдена здесь

В iOS в фоновом режиме разрешено запускать только определенные типы приложений:

  • Приложения, которые воспроизводят звуковой контент дляпользователь в фоновом режиме, например приложение музыкального проигрывателя
  • приложения, которые постоянно информируют пользователей об их местонахождении, например приложение навигации
  • приложения, поддерживающие голос по интернет-протоколу (VoIP))
  • Приложения для газетных киосков, которые должны загружать и обрабатывать новый контент
  • Приложения, которые регулярно получают обновления от внешних аксессуаров

Информация о запуске фонового процесса с помощью VOiPТип приложения можно найти здесь

0 голосов
/ 14 марта 2012

То, к чему вы стремитесь, не может быть достигнуто на iOS:

Произвольные приложения не могут работать в фоновом режиме в течение произвольного промежутка времени.

Вы можете попытаться смягчить некоторые из них, используя локальные уведомления вместо NSTimer для планирования обновления. Это, однако, только выиграет вам очень ограниченное количество времени для работы в сети.

Вопрос, который вы должны задать себе в этот момент, вероятно:
Если вы обновляете только два раза в день, насколько плохой может быть запуск загрузки, когда ваше приложение становится активным?

...