Это рекомендуемый способ экономии заряда аккумулятора при прослушивании местоположения пользователя.
Действительно?Единственный способ получить хороший шаблон - это использовать AlarmManager
для пятиминутной задержки, чтобы устройство засыпало между проверками местоположения.
Единственный способ, которым я обнаружил, - «ждать»на 5 минут запланировать java.util.Timer для выполнения TimerTask за 5 минут, и эта TimerTask должна снова зарегистрировать LocationListneres.
И это будет ужасное использование батареи, потому что это будетозначает, что вам необходимо постоянно включать устройство, не давая ему перейти в спящий режим.
У меня нет главного потока
Да, вы делаете,Все процессы имеют основной поток приложений.onCreate()
, onStartCommand()
и т. Д. Службы вызываются в главном потоке приложений.
У меня нет активности.
Тогда вам лучшенапишите один, так как ваше приложение не будет работать на Android 3.1+ без него.Ваше приложение не будет работать до тех пор, пока пользователь не запустит одно из ваших действий на Android 3.1 +.
Как я могу попросить свою собственную службу снова зарегистрировать моих слушателей?
ЧтоВы пытаетесь решить довольно сложную проблему.Вам нужно не только организовать, чтобы устройство засыпало и снова просыпалось, но вы также должны иметь дело со множеством крайних случаев (например, что, если нет места, доступного, потому что устройство находится в режиме полета или находится под землей).или что-то в этом роде?).
Я написал LocationPoller
для обработки вашего варианта использования, и другой разработчик разработал его для создания более многофункциональной реализации .
Независимо от того, используете ли вы один из них напрямую или просто изучаете их реализацию, они должны быть полезны, чтобы помочь вам понять, как решить эту проблему.Все детали, тем не менее, выходят за рамки ответа StackOverflow - для объяснения всего этого потребуется несколько страниц в книге.