Служба останавливается после нескольких минут бездействия

Я пишу приложение для Android, используя поставщика местоположения GPS в службе, которая запускается при создании основного действия (если служба уже не запущена). У меня сложилось впечатление, что служба будет продолжать работать, за тем маловероятным исключением, что диспетчер задач может убить ее, если будет нехватка памяти. По какой-то причине служба перезапускается, если есть период очень низкой активности, независимо от того, сколько памяти доступно. Когда пользователь находится снаружи и GPS может определить позицию, служба будет получать позицию каждые 30 секунд и отключать GPS в промежутках между ними (для экономии заряда батареи). В этом случае служба продолжает работать без каких-либо проблем, но когда пользователь перемещается внутрь и положение GPS не может быть найдено в течение пяти секунд, служба отключает GPS и повторно активирует GPS только каждые 200 секунд, чтобы проверить, пользователь вернулся на улицу. В этом случае служба иногда будет остановлена ​​и не будет перезапущена, пока приложение не будет повторно открыто, а действие не перезапустит службу. Я создал отдельную службу, чтобы убедиться, что процесс не прерывается. Кто-нибудь знает, почему это может происходить? Большое спасибо за Вашу помощь! -Дом


person GPSmaster    schedule 23.04.2011    source источник
comment
У вас правильно настроены вейклоки?   -  person nickfox    schedule 24.04.2011
comment
что такое вейклоки? извините, я нуб   -  person GPSmaster    schedule 24.04.2011
comment
так что в моем случае подойдет PARTIAL_WAKE_LOCK?   -  person GPSmaster    schedule 24.04.2011
comment
Да, но изучите приведенный ниже пример кода, чтобы понять, как это реализовать. Это не так прямолинейно, как может показаться сначала. И еще кое-что. Отключение GPS всего через 30 секунд может быть неправильным путем. Возможно, телефону не хватает времени для повторного получения данных GPS. Вам нужно будет проверить это и, возможно, постоянно держать GPS-радио включенным.   -  person nickfox    schedule 24.04.2011
comment
GPS-чипу Navilink 3.0 (в моем Droid X) требуется около 3-5 секунд, чтобы вычислить позицию на улице при ясном виде неба. Я также не заметил снижения точности (по сравнению с постоянно включенным). Как вы думаете, могут ли быть другие последствия включения и выключения каждые 30 секунд?   -  person GPSmaster    schedule 24.04.2011


Ответы (1)


Я бы посмотрел на пример Марка Мерфи, который касается сервисов и вейклоков:

WakefulIntentService

Если вы не можете понять это из его примера кода, тогда вы хотите получить его книгу Advanced Android, где проблема подробно объясняется.

Руководство занятого программиста по расширенной разработке Android

Это одни из лучших книг по разработке под Android, которые стоят своих денег.

person nickfox    schedule 23.04.2011
comment
Спасибо! Я думаю, мне нужно больше узнать об ожидаемых намерениях и контексте приложения, чтобы понять, о чем идет речь. - person GPSmaster; 24.04.2011