Недостатки использования шины событий для обновления интерфейса?

Я начал использовать библиотеку шины событий Otto для обновления интерфейса (действий) из различных компонентов в моем Приложение для Android. Например, когда вносятся изменения в класс модели, я отправляю сообщение в шину событий или, если AsyncTask завершился, я отправляю событие в шину событий в методе onPostExecute.

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

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

Что я считаю спорным, я могу только объяснить это тем, что этот код, конечно, выполняется в другом потоке, но все еще находится в действии.

Мой вопрос: приводит ли такое использование к каким-либо недостаткам? Наличие нескольких приостановленных действий, выполнение событий, обновление элементов (приостановленных) действий или их игнорирование. Приводит ли это к заметным накладным расходам, или я могу их игнорировать?

Есть ли другой подход, когда кто-то хочет использовать шину событий для обновления интерфейса?


person Mahoni    schedule 20.06.2014    source источник
comment
Вы отменяете регистрацию своей деятельности в автобусе в onPause? Это не похоже на вас, если вы заметили, что приостановленные действия обновляются. Одним из недостатков может быть то, что приостановленные действия могут быть уничтожены, поэтому, если вы полагаетесь на получение событий во время приостановки для согласованности пользовательского интерфейса / данных, вы можете столкнуться с проблемами.   -  person swanson    schedule 24.06.2014
comment
@swanson Точно, пока нет, но с учетом этого все кажется намного более разумным.   -  person Mahoni    schedule 27.06.2014


Ответы (1)


Приводит ли это к заметным накладным расходам, или я могу их игнорировать?

Это невозможно сказать абстрактно. Это будет зависеть от того, какую работу вы делаете и как часто вы ее делаете.

Есть ли другой подход, когда кто-то хочет использовать шину событий для обновления интерфейса?

Не требуется, чтобы ваши действия и фрагменты прислушивались к событиям, пока они находятся в фоновом режиме. Например, вы можете зарегистрироваться на события в onResume() и отменить регистрацию в onPause(). Затем вы можете использовать другие методы (например, шаблон Отто @Producer) для обновления пользовательского интерфейса вашей активности / фрагмента в массовом порядке, когда он возвращается на передний план в onResume().

person CommonsWare    schedule 20.06.2014
comment
@beerBear: Подобная альтернатива чему? Если вы имеете в виду шаблон @Producer, вы можете попробовать закрепленные события в EventBus зеленого робота. - person CommonsWare; 01.02.2015