Android - Таймер и GPS-трекинг. Должен ли я использовать услугу?

Я пишу и приложение, которое имеет таймер работы (обновляет пользовательский интерфейс каждые 10 секунд, как часы), а также отслеживает расстояние через GPS. Предполагаемый вариант использования — запустить это приложение в течение нескольких часов, поэтому оно никогда не должно быть уничтожено системой. Очень похоже на многие работающие приложения, которые вы найдете на рынке сегодня (хотя это не то, чем я занимаюсь).

Требование о том, что система не должна его убивать, указывает мне на необходимость создания службы, но это похоже на передачу обновлений таймера и расстояния в пользовательский интерфейс, что часто было бы действительно неэффективным.

Будет ли использование службы лучшим подходом здесь? Если да, то как мне эффективно обновлять время и расстояние в пользовательском интерфейсе? Или есть другой способ не дать системе убить мое приложение?


person Scott    schedule 12.03.2012    source источник


Ответы (2)


Я решил, что действительно буду пользоваться сервисом, но только запускать его и использовать, когда активность будет приостановлена. Активность передаст текущее состояние службе, где она позаботится обо всем, что необходимо сделать, а при возобновлении активности получит состояние обратно от службы и уничтожит его.

person Scott    schedule 13.03.2012

Вам не нужна служба, если только вы не требуете, чтобы что-то происходило, даже когда действие вашего приложения отодвигается от другого действия и когда экран телефона выключается. При прочих равных условиях лучше, чтобы ваше приложение корректно запускалось при возобновлении работы.

Например, если у вас есть секундомер, вы отслеживаете время начала. Когда активность ваших приложений приостановлена, вы останавливаете все. Вы прекращаете считать. Но когда вы возобновляете работу, вы знаете время начала, чтобы вы могли выбрать правильное время и возобновить обновление пользовательского интерфейса.

Просто создайте таймер/поток для обновления вашего пользовательского интерфейса в вашей деятельности. Начните с onResume() и остановитесь на onPause().

person Jeffrey Blattman    schedule 12.03.2012
comment
Спасибо. Это имеет смысл с таймером, но я не думаю, что это сработает для части GPS. Я могу сохранить последнее известное местоположение, но, поскольку они могут совершать повороты, было бы неправильно просто использовать это последнее местоположение при возвращении к Упражнению. - person Scott; 13.03.2012
comment
вы регистрируете прослушиватель местоположения внутри активности. вы начинаете слушать в onResume() и останавливаетесь в onPause(). если вам нужно отслеживать местоположение, когда ваша активность не на переднем плане, верно, вам нужен сервис. - person Jeffrey Blattman; 14.03.2012