Обновление данных действия из сервиса - PullRequest
2 голосов
/ 15 мая 2011

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

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

Деятельность (MainActivity) реализует пользовательский интерфейс OnDataChangedListener.В onCreate функции MainActivity для регистрации она вызывает статический метод службы (MyService.addDataChangedListener (this)).

Когда служба находит измененные данные, она выполняет итерацию по своему списку слушателей и вызывает onDataChangedNewData).Наконец, метод MainActivity onDataChanged изменит текст действия, чтобы отразить новые данные.

В onPaused я планирую отменить регистрацию слушателя и перерегистрировать его в onResume.onResume также будет вызывать MyService.getDataset () для получения самых последних данных при возобновлении работы приложения.

Этот подход, похоже, не будет соответствовать жизненному циклу приложений Android.Кто-нибудь знает лучший способ справиться с этим?Спасибо!

Ответы [ 2 ]

4 голосов
/ 15 мая 2011

Когда служба получает новые данные:

  1. Сохраняет данные в пользовательский класс приложения: Как объявить глобальные переменные в Android?

  2. Отправляет трансляцию, которую (возможно, несколько) заинтересованных слушаний прослушивают. Деятельности, которые не активны, не получают трансляции.

  3. Когда активность активирована, она проверяет, есть ли новые данные в приложении (поскольку он не получал широковещательные обновления, когда неактивен).

1 голос
/ 15 мая 2011

Я бы предпочел использовать BroadcastReceiver вместо пользовательского интерфейса.Но техника та же: зарегистрируйте ее в onResume(), отмените регистрацию в onPause().Сервис увольняет, очевидно.

...