iPhone запускает периодический процесс в фоновом режиме - аккумулятор оптимизирован - PullRequest
4 голосов
/ 08 сентября 2011

Я хочу запустить определенную задачу в фоновом режиме. Эта задача занимает несколько секунд (она записывает некоторые данные о местоположении GPS в файл). Эта задача должна выполняться один раз в 1 час.

Как я понял из SDK, у меня нет способа ИНИЦИРОВАТЬ что-либо в фоновом режиме, если я не запустил Location Services навсегда. Когда эта служба запускается, она время от времени дает мне событие, и я могу запустить свой код во время этих вызовов. Я попробовал это, и даже с минимально возможной точностью мой аккумулятор очень быстро разряжается.

Итак, я ищу способ запуска Location Services на несколько секунд каждый час. Все остальное время я НЕ хочу запускать службы определения местоположения и НЕ хочу использовать батарею.

Можете ли вы помочь здесь, пожалуйста? Спасибо,

Ген

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Что вы на самом деле хотите знать каждый час? Вы пытаетесь точно определить местоположение или просто определить, значительно ли переместился телефон? startMonitoringSignificantLocationChanges уведомит вас, когда телефон будет перемещаться «значительно» (что обычно означает смену вышек сотовой связи). В городах это может случаться довольно часто. startMonitoringForRegion:desiredAccuracy: будет уведомлять вас, только когда вы выйдете за пределы указанного радиуса.

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

Если вы являетесь приложением VoIP, то вы можете зарегистрировать периодический интервал проверки, когда вы можете запустить код. Но вы не можете сделать это для приложений определения местоположения.

Профилировали ли вы свой код с помощью инструмента диагностики энергии? Что на самом деле есть время и сила? Вы жуете радио, процессор, диск?

EDIT

Когда приложение умирает, Значительные изменения по-прежнему продолжают выполняться и оставляют небольшую иконку со стрелкой рядом с процентом на верхней панели инструментов iPhone. Мои пользователи жалуются, что значки остаются после убийства приложения

После того, как приложение умирает, если вы были зарегистрированы для значительных изменений, вы ожидаете, что вас снова запустят в ответ на них. Если вы хотите отменить регистрацию в случаях, когда вас уволили, вы можете добавить stopMonitoring... к вашему applicationWillTerminate: методу. Это не гарантированно будет вызвано, но это хорошая вещь, и я считаю, что она будет вызвана, если пользователь прервал вас напрямую, а вы не были отстранены (не проверяли это).

Опять же, существенные изменения местоположения должны быть чрезвычайно дешевыми с точки зрения срока службы батареи, если есть покрытие ячейки. Они не должны заставлять GPS оставаться включенным.

1 голос
/ 08 сентября 2011

Лучше всего использовать значительные изменения местоположения ... вот несколько ссылок, по которым вы можете получить помощь -

http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

http://www.switchonthecode.com/tutorials/getting-your-location-in-an-iphone-application

http://longweekendmobile.com/2010/07/22/iphone-background-gps-accurate-to-500-meters-not-enough-for-foot-traffic/#more-480

...