Есть ли способ поставить в очередь задачу (т.е. запрос HTTP), которая будет выполнена, как только сетевое соединение станет доступным? - PullRequest
2 голосов
/ 22 октября 2011

Есть ли способ поставить в очередь некоторую исполняемую задачу (например, HTTP-запрос), которая будет выполнена после того, как сетевое соединение станет доступным, учитывая, что приложение приостанавливается к моменту восстановления сетевого подключения?

Aтипичный сценарий:

Пользователь в поезде открывает приложение.Они изменяют некоторое состояние в приложении, которое затем должно быть передано на какой-либо сервер.Затем пользователь закрывает / приостанавливает приложение.К сожалению, в то время как приложение было активным, у iphone не было сигнала, и он восстановил его только на следующей железнодорожной станции.На этом этапе при восстановлении соединения я хотел бы, чтобы была активирована какая-то задача, чтобы он мог попытаться выполнить передачу измененного состояния на сервер.

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

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

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

Но если бы вы хотели рассмотреть «креативные» решения, я бы подумала:

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

Уведомления о местонахождении. Создайте очередь сетевых операций в своем приложении так долго, как хотите. Добавьте события к нему, пока вы работаете в автономном режиме. Затем зарегистрируйте ваше приложение для событий, связанных со значительными изменениями. Вы будете часто (извините, не можете точно сказать, как часто) получать их, когда устройство выключается, а затем возвращается в другую сеть / вышку сотовой связи. Эти уведомления могут перевести ваше приложение в активное фоновое состояние, в котором вы можете попытаться отключить сохраненную очередь сетевых операций.

1 голос
/ 22 октября 2011

Не без пользователя, перезапускающего приложение, нет.Извините :( На iPhone вам не разрешено выполнять такие фоновые задачи, как эта.

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

...