Как управлять сервисом Android?

В настоящее время я разрабатываю свое первое приложение для Android. Я хочу, чтобы пользователь моего приложения мог активировать «автоматическое обновление данных», что означает, что некоторые данные должны обновляться каждые x минут. Я создал службу, которая запускается

service = new Intent(context, MyService.class);
context.startService(service);

и я использую TimerTask в службе для периодического обновления данных.

timer = new Timer();

TimerTask tt = new TimerTask() {
    public void run() {
        refreshData();
    }
};
timer.scheduleAtFixedRate(tt,0,interval);

Я заметил, что служба может быть перезапущена время от времени. Как я могу гарантировать, что refreshData(); запускается каждую минуту интервала (не больше или меньше)? Если пользователь меняет интервал (предпочтение), как убить текущий таймер (задачу) и запустить новый? Прямо сейчас он, кажется, запускает новый, но не убивает старый, заставляя refreshData() выполняться в соответствии с двумя интервалами.

Любая помощь приветствуется!


person adam    schedule 04.03.2011    source источник


Ответы (1)


(Я новичок в разработке Android, так что принимайте все, что я говорю, с долей скептицизма)

Что ж, мне кажется, вам нужно много думать о структуре. Есть разные способы связи с сервисом. Я думаю, что лучшим вариантом будет транслировать интент, заставить сервис получать интент и менять интервал на основе информации, полученной от интента.

person Gonzo    schedule 04.03.2011
comment
Привет, можешь объяснить (или указать мне учебник), как это сделать? - person adam; 05.03.2011
comment
Извините, что не ответил быстро. Я все еще выясняю, как использовать этот сайт. В любом случае, проверьте удаленный мессенджер developer.android.com/reference/android /приложение/ - person Gonzo; 06.03.2011
comment
Ух ты. Не знал, что нужно нажать Shift-Enter, чтобы ввести новую строку, и я также не знал, что у меня есть 5 минут, чтобы отредактировать комментарий. Я хотел сказать, что вы можете сделать две вещи: использовать намерения или обработчики для связи со службой. С намерениями вы должны посмотреть, как зарегистрировать широковещательный приемник (не забудьте поместить фильтр намерений в манифест). С обработчиками вы должны проверить этот пример в API: developer.android.com/reference/android/app/ Я думаю, что проще использовать обработчик. Пожалуйста, расскажите мне, как это происходит, мне интересно - person Gonzo; 06.03.2011
comment
Привет Гонзо! Я реализовал приемник и создал экземпляр AlarmManager. Насколько я понимаю (проверено всего пару секунд сейчас), сервис, которым я пользовался ранее, не нужен. Я просто запускаю аварийный менеджер в своей основной деятельности и помещаю свой метод обновления в приемник, верно? - person adam; 11.03.2011
comment
Это звучит правильно. Если вы получаете данные из сети, не забудьте отделить сетевые запросы от основного потока, чтобы ваше приложение оставалось отзывчивым. Кстати, об обработчиках в другом комментарии совершенно неправильно (упс). Однако часть намерений верна. - person Gonzo; 13.03.2011