У меня есть приложение, которое использует CLLocationManager в фоновом режиме. Работает как положено. Я пытаюсь несколькими способами оптимизировать батарею, потому что она должна предоставлять информацию о местоположении в режиме реального времени. Я знаю, что когда CLLocationManager настроен для работы в фоновом режиме, мое приложение активируется каждый раз, когда происходит обновление местоположения.
Так что я думал о том, чтобы сделать что-то подобное: когда приходит обновление местоположения и вызывается мой обработчик событий, я обрабатываю местоположение, останавливаю обновления местоположения и запускаю таймер, который снова запускает обновления местоположения через 15 секунд.
Это работает довольно хорошо, если телефон не спит или приложение находится в фоновом режиме. Когда телефон переходит в режим сна, таймер останавливается. Есть ли способ избежать этого? я думал, что, возможно, поскольку я прекращаю обновления местоположения, IOS считает, что приложение больше не разрешено в фоновом режиме, поэтому оно останавливает выполнение всего кода, но на самом деле я понятия не имею, что происходит. У кого-нибудь есть подсказка?
Редактировать: я протестировал приведенное ниже решение от Михала, и оно работает как шарм. Даже если таймер истекает через 15 секунд, эффект от батареи велик. Мое приложение использовало 50% батареи за несколько часов. Теперь он даже не потребляет 5%.
Вот последовательность, которую я использую:
- Создание LocationManager и настройка его работы в фоновом режиме с наилучшей точностью
- Когда прибывает первое исправление GPS, установите точность в 3 километра и запустите таймер, который истекает через 15 секунд
- Когда отметится таймер, верните точность обратно к лучшему и загрузите на сервер все полученные местоположения.