Хорошо ли заменить широковещательную отправку и получение состояний событий шиной событий GreenRobot от службы к действию?

Это продолжение этого сообщения Как использовать EventBus GreenRobot для трансляции событий из службы в активность?

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

Сервис используется для отслеживания изменений в соединении BLE.

Активность используется для сообщения об этом состоянии подключения пользовательскому интерфейсу.

Существующий сценарий. Служба использует широковещательную рассылку для отправки событий (через метод sendBroadcast()) каждого состояния, вращающегося вокруг BLE (подключено/отключено, данные доступны и т. д.).

Мое сомнение: могу ли я использовать библиотеку EventBus этого GreenRobot для управления (отправки и получения событий) так же, как это делает широковещательная рассылка? Если да, то есть ли что-то, что я должен учитывать (о безопасности потоков) или что нужно знать, полностью заменяя парадигму управления широковещательной передачей (отправка и получение).


person Dinesh Ravi    schedule 15.10.2015    source источник


Ответы (1)


В настоящее время я использую Otto (очень похоже на EventBus), чтобы выполнить то, что вы хотите сделать.

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

Это НАМНОГО проще реализовать с помощью Otto (и, возможно, также EventBus, я не использовал эту конкретную библиотеку), так как мне нужно было отправлять 4 фрагмента информации каждый раз, когда я публиковал какую-то информацию, и каждый раз добавлять дополнения к намерениям стало утомительно. обычная система sendBroadcast().

У меня не было никаких проблем после перехода на Otto, и это помогло мне очистить большую часть моего кода.

Одна вещь, которую следует отметить (по крайней мере, с Отто), заключается в том, что по умолчанию он настроен на разрешение публикации/подписки только в основном потоке, и, поскольку вы используете службу, вам придется отредактировать это. Я не уверен, есть ли то же самое в EventBus, но обратите внимание на их документацию.

person Moonbloom    schedule 15.10.2015
comment
Следует отметить одну вещь (по крайней мере, с Отто), это то, что по умолчанию он настроен на разрешение публикации/подписки только в основном потоке, и поскольку вы используете службу, вам придется отредактировать это. ›› Редактировать какой каспер? - person Dinesh Ravi; 15.10.2015
comment
Поскольку вы используете службу, которая работает в другом потоке, вам придется настроить Otto, чтобы разрешить публикацию и подписку во всех потоках (а не только в основном потоке), иначе он не будет работать. На их странице github есть полное руководство. - person Moonbloom; 15.10.2015