Я пытаюсь написать службу, которая каждые X минут будет пытаться определить местоположение GPS устройства, запускать и записывать в фоновом режиме, даже когда приложение не в фокусе.
Итак,время создавать сервис.
Я создал сервис, настроил locationListener, получил менеджер местоположений и requestLocationUpdates ... все хорошо с миром .. рудиментарный скелет работает.
СейчасЯ не хочу, чтобы GPS работал постоянно, так как это может привести к потере заряда батареи. Я хотел бы, чтобы сервис работал, запускал GPS, запрашивал обновление, затем выключал (по крайней мере, его интерес к местоположению GPS).и затем через 5 или 10 минут сделайте это снова ..
Достаточно просто, на методе onLocationChanged () моего слушателя, я добавляю строку LocationManager (removeUpdates (locationListener)) .. .. поэтому, когда мой сервис запрашиваетобновление, он получает только одно и закрывается.
Я решил добавить небольшой цикл while, который эффективно регистрирует мой слушатель местоположения, и sпрыгает на Х минут.Логично, что он должен зарегистрировать, что ему нужна информация, затем спать .. приходит обновление, я получаю это обновление в onLocationChange, и он отменяет регистрацию своего интереса в событии, отключая GPS до следующего выполнения цикла.
Теперь у меня есть 2 вопроса 1) Логично ли это нормально?или есть более элегантный способ?Помните, я хочу, чтобы это записывало информацию о том, находится ли запущенное приложение в фокусе, и, честно говоря, даже если запускаемое приложение было убито, хотелось бы, чтобы служба продолжала работать потенциально, но это решение по проекту, которое я еще не полностью приняла.
Второй вопрос: мне нужно будет поместить этот LOOP в поток, так как наличие его в oncreate приводит к тому, что служба в конечном итоге будет уничтожена, потому что она занимает слишком много времени, чтобы вернуться из oncreate, так что будетлучший способ сделать это?AsyncTask является опцией, но это задача, которая теоретически никогда не будет завершена. Обработчик также кажется глупым, поскольку нет реальных обратных вызовов, он просто регистрируется для обновлений GPS, а неинтересный код находится в LocationListener.onLocationChange ().
Нет реальной связи, которая могла бы выйти из этого потока после создания экземпляра, хотя для этого нужно было бы дать сигнал об окончании / завершении, когда служба будет закрыта каким-либо взаимодействием пользователя ссделай так ...
Так я должен просто использовать базовый поток?Перейти с AsyncTask, хотя он никогда не вернется?или лучше использовать Handler?Или моя модель просто в дурной форме вышла из ворот?