Как я могу обновить информацию в Действии Android от фонового Сервиса

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

Как я могу настроить свое Действие для слушания Сервиса? Действительно ли это - лучший способ приблизиться к этой проблеме?

Например, если бы Вы воображаете список курсов акций - данные были бы изменены регулярно и должны быть в синхронизации с (в моем случае) Сервис, который вычисляет/выбирает данные постоянно.

Заранее спасибо

39
задан Janusz 27 January 2012 в 08:52
поделиться

3 ответа

Как я могу настроить мою деятельность для прослушивания Службы? Является ли это лучшим способом решения этой проблемы?

На мой взгляд, у вас есть три основных варианта:

  1. Опрос. Действие периодически запрашивает последние данные у службы . ИМХО, этот вариант отстой, но он, безусловно, возможен.

  2. Обратные вызовы. Согласно ответу jax, Activity регистрирует объект обратного вызова («наблюдатель») в службе . Служба вызывает метод обратного вызова при изменении данных, который, в свою очередь, обновляет пользовательский интерфейс. Вы можете увидеть пример использования этого со службой здесь .

  3. Трансляция Намерения . Служба передает намерение через sendBroadcast () при изменении данных. Действие Activity регистрирует BroadcastReceiver с помощью registerReceiver () , и что BroadcastReceiver уведомляется о входящей широковещательной рассылке. Это вызывает действие для загрузки последних данных из службы или, возможно, просто для получения последних данных из дополнительных материалов в широковещательном намерении . Вы можете увидеть пример использования этой техники со службой здесь .

94
ответ дан 27 November 2019 в 02:16
поделиться

Звучит как хороший кандидат для паттерна наблюдателя. Обычно ваша активность (The Observer) регистрируется в фоновой службе (The Observable), и вы можете отправлять или извлекать данные из своей Activity. В этом случае вашим наблюдателем будет ваша активность, а наблюдаемым - ваша служба.

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

PS: Читаю сейчас.

4
ответ дан 27 November 2019 в 02:16
поделиться

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

Вы можете использовать какой-то ArrayAdapter для получения данных в ListView. ArrayAdapter имеет метод, называемый adpater.notifyDataSetChanged () , каждый раз, когда вы вызываете этот метод, адаптер будет видеть, что соответствующие данные изменились, и затем уведомит список, что он должен обновиться при следующей возможности.

0
ответ дан 27 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: