Приложение для iPhone, выполняющее http-запросы в фоновом режиме
В моем приложении для iPhone я хотел бы выполнить несколько запросов, когда приложение находится в фоновом режиме. Я уже использую ASIHttpRequest для выполнения запросов, это прекрасно работает, но сейчас я пытаюсь найти способ вызвать их в фоновом режиме. В делегате приложения я добавил вызов метода, делающего запрос:
[self getItemsFromServer]
getItemsFromServer выполняет асинхронный запрос (на симуляторе я видел журнал этих методов, как только я возвращал приложение на передний план). Как я могу использовать какой-то таймер, чтобы этот метод запускался каждые 10 минут (мне просто нужно запускать его 4 или 5 раз, а не каждые 10 минут, пока он не вернется на передний план:-))?
большое спасибо,
С уважением,
Люк
3 ответа
iOS4 позволяет вашему приложению работать в течение X раз, при условии, что iOS4 предоставляет вам время, которое вы запрашиваете. Проверьте: завершение длительной задачи в фоновом режиме.
В частности,
В любое время, прежде чем оно будет приостановлено, приложение может вызвать метод beginBackgroundTaskWithExpirationHandler: запросить у системы дополнительное время для выполнения какой-либо длительной задачи в фоновом режиме. Если запрос удовлетворен и если приложение переходит в фоновый режим во время выполнения задачи, система позволяет приложению запускаться в течение дополнительного периода времени вместо его приостановки.
Вы могли бы, вероятно, использовать Task Finishing, чтобы сделать это. В iOS вы можете пометить поток как завершающий и дать ему определенное время жизни. Это позволит вам сделать еще несколько звонков на ваш веб-сервер.
Взгляните на выполнение кода в фоновом режиме
На самом деле, вам не разрешено делать обычные HTTP-вызовы в фоновом режиме. Единственные приложения, которые могут быть активными в фоновом режиме, это те, которые воспроизводят аудио, выполняют определение местоположения или выполняют VOIP-вызовы. Я верю, что вся философия Apple с фоном заключается в том, что приложения не должны выполнять "работу", кроме этих ограниченных случаев, потому что ресурсы ограничены. Предлагаемый способ обойти это - использовать (тьфу) уведомления или просто обновить, когда ваше приложение просыпается. Документ, который будет кодировать javaforfood ссылки, объясняет это.