iPhone запускает периодический процесс в фоновом режиме - оптимизированный способ батареи

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

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

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

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

Гена


person Gena    schedule 08.09.2011    source источник


Ответы (2)


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

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

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

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

ИЗМЕНИТЬ

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

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

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

person Rob Napier    schedule 08.09.2011
comment
Спасибо. Я посмотрю на это. - person Gena; 09.09.2011
comment
Я попробовал это и пришел к следующим 2 выводам: 1. Служба SignificantLocationChanges НЕ позволяет мне запускать задачи в фоновом режиме, в отличие от обычных служб определения местоположения. 2. Отключить службу SignificantLocationChanges невозможно. Он всегда остается включенным, даже когда приложение убито. - person Gena; 11.09.2011
comment
У вас есть location в UIBackgroundModes, но вы не просыпаетесь при значительных изменениях местоположения? Звонок stopMonitoringSignificantLocationChanges не отменяет регистрацию? - person Rob Napier; 11.09.2011
comment
1. У меня локация в фоновом режиме. Я просыпаюсь из-за значительных изменений местоположения. Но я не могу запустить таймер в фоновом режиме и выполнять операции, когда этот таймер срабатывает. Таймер не срабатывает в фоновом режиме, в отличие от использования служб определения местоположения (таймер срабатывает в фоновом режиме). 2. Stop не снимает меня с регистрации, если я могу его запустить. Но я не могу запустить его, если мое приложение было убито. Когда приложение умирает, Значительные изменения продолжают выполняться и оставляют небольшой значок стрелки направления рядом с процентом на верхней панели инструментов iPhone. Мои пользователи жалуются, что значки остаются после закрытия приложения - person Gena; 18.09.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

person Saurabh    schedule 08.09.2011
comment
Спасибо за ответ. Это именно то, чем я сейчас занимаюсь и чего НЕ хочу делать :) Слишком большая батарея. - person Gena; 08.09.2011
comment
Что ж... если вы используете значительное изменение местоположения, то нет лучшего способа увеличить срок службы батареи... - person Saurabh; 08.09.2011