Как сохранить службу Intent
У меня есть два примера Intentservice. Одним из них является пример загрузки в общей книге. другой находится по адресу http://www.vogella.com/articles/AndroidServices/article.html. В обоих этих примерах показано, как служба выполняет конечную задачу, и они, очевидно, уничтожают себя, выполняя до конца область действия события onHandleIntent.
Служба, которую я пишу, должна иметь события и слушать вещи. Одним из них является LocationListener, прослушивающий движение GPS. Другой отправляет сообщения в службу REST и слушает ответы. Я хочу, чтобы он работал до тех пор, пока не истечет время или пока ему не будет приказано выйти из программы, которая его начала.
Как мне сохранить его работоспособным? Куда, например, поместить мою реализацию LocationListener? Спасибо гэри
3 ответа
Как мне сохранить его работоспособным?
Вы не IntentService
предназначен для выполнения части работы (или, возможно, нескольких из очереди, если команды приходят быстро), а затем завершить работу.
Служба, которую я пишу, должна иметь события и слушать вещи.
Тогда вы не должны использовать IntentService
, Используйте регулярный Service
, с вашим собственным фоновым потоком (ами) по мере необходимости.
Вы можете достичь этого одним из двух способов,
AlarmManager - это встроенный класс Android, который позволяет вам выполнять определенные действия в определенный период времени.
TimerTask делает то же самое, что AlarmManager, вы можете повторять определенные действия вашего кода снова и снова.
Однако AlarmManager более легок в исполнении, поэтому я предлагаю вам перейти к классу AlarmManager.
Создайте AlarmManager, который выбирает координаты GPS и регулярно публикует их на сервере.
Посмотрите на этот Пример AlarmManager.
Чтобы служба работала, ваш сервис должен быть возвращен START_STICKY
в методе обслуживания onStartCommand()
,
При этом служба будет работать, даже если вы выйдете из своей деятельности.
Примечание. Android все еще убивает службы через некоторое время (от 30 минут до 1 часа), если они не являются приоритетными службами. использование startForeground(notification)
чтобы сделать это на переднем плане.
удачи