Я работаю над приложением для iOS, которое в идеале должно запускать службы определения местоположения в фоновом режиме. Я проверил важное место, но это недостаточно точно. Точное местоположение идеальное, но при этом расходуется слишком много заряда батареи, чтобы сделать приложение жизнеспособным.
Чтобы обойти эту проблему с батареей, я подумал, что нашел решение, которое использует NSTimer
внутри UIApplication:beginBackgroundTaskWithExpirationHandler:
. При этом местоположение включается, а затем мгновенно снова выключается, что запускает обновление местоположения и сбрасывает backgroundTimeRemaining
.
Однако это решение по-прежнему сильно разряжает батарею - 15% -20% каждые 3-4 часа - даже если локация включается только на одну секунду каждые 9 минут. Приложение не работает в фоновом режиме, кроме этого таймера. Я даже попытался освободить все представления при входе в фон, чтобы убедиться, что ничего не сидит и не потребляет батарею.
Проверяя внутренние инструменты, я обнаружил, что приложение использует 0,0% ЦП и 14 МБ памяти в этом состоянии ожидания. Я немного не понимаю, в чем причина, тем более, что запуск GPS на 1 секунду каждые 540 секунд не обеспечивает заметного снижения расхода заряда батареи по сравнению с работой в режиме 24/7.
Я начал собирать следующие вопросы, которые могут способствовать возникновению проблемы, и я надеюсь, что у кого-то есть ответ или идея ...
Останавливает ли запуск приложения таким образом телефон от перехода в режим пониженного энергопотребления?
Запуск GPS потребляет огромное количество энергии?
Продолжает ли GPS работать какое-то время даже после выключения?