Я пытаюсь создать простое приложение Android, которое имеет ActivityList информации, когда приложение запускается, я планирую запустить Сервис, который будет постоянно вычислять данные (это будет изменяться), и я хочу, чтобы ActivityList был в синхронизации с данными, которые сервис вычисляет для жизни приложения.
Как я могу настроить свое Действие для слушания Сервиса? Действительно ли это - лучший способ приблизиться к этой проблеме?
Например, если бы Вы воображаете список курсов акций - данные были бы изменены регулярно и должны быть в синхронизации с (в моем случае) Сервис, который вычисляет/выбирает данные постоянно.
Заранее спасибо
Как я могу настроить мою деятельность для прослушивания Службы? Является ли это лучшим способом решения этой проблемы?
На мой взгляд, у вас есть три основных варианта:
Опрос. Действие
периодически запрашивает последние данные у службы
. ИМХО, этот вариант отстой, но он, безусловно, возможен.
Обратные вызовы. Согласно ответу jax, Activity
регистрирует объект обратного вызова («наблюдатель») в службе
. Служба
вызывает метод обратного вызова при изменении данных, который, в свою очередь, обновляет пользовательский интерфейс. Вы можете увидеть пример использования этого со службой
здесь .
Трансляция Намерения
. Служба
передает намерение
через sendBroadcast ()
при изменении данных. Действие Activity
регистрирует BroadcastReceiver
с помощью registerReceiver ()
, и что BroadcastReceiver
уведомляется о входящей широковещательной рассылке. Это вызывает действие
для загрузки последних данных из службы
или, возможно, просто для получения последних данных из дополнительных материалов в широковещательном намерении
. Вы можете увидеть пример использования этой техники со службой
здесь .
Звучит как хороший кандидат для паттерна наблюдателя. Обычно ваша активность (The Observer) регистрируется в фоновой службе (The Observable), и вы можете отправлять или извлекать данные из своей Activity. В этом случае вашим наблюдателем будет ваша активность, а наблюдаемым - ваша служба.
Если вы ничего не знаете о шаблонах проектирования, купите «Шаблоны проектирования в первую очередь», они легко читаются и содержат много полезной информации.
PS: Читаю сейчас.
У вас будет запущен фоновый поток, который вычисляет изменения в списке. Этому потоку теперь нужна возможность уведомить графический интерфейс об обновлении списка.
Вы можете использовать какой-то ArrayAdapter для получения данных в ListView. ArrayAdapter имеет метод, называемый adpater.notifyDataSetChanged () , каждый раз, когда вы вызываете этот метод, адаптер будет видеть, что соответствующие данные изменились, и затем уведомит список, что он должен обновиться при следующей возможности.