Eventbus: Прикрепленные события получены несколько раз

Созданный на 25 нояб. 2013  ·  3Комментарии  ·  Источник: greenrobot/EventBus

При работе с залипающими событиями я заметил, что получал события несколько раз. Это тот случай, когда регистрация и публикация событий происходят одновременно. Я быстро просмотрел код. В методе postSticky я заметил, что блокировка объекта stickyEvents снимается сразу после установки события sticky. Затем событие отправляется текущим слушателям.
Для регистрации слушатель сначала регистрируется для получения событий, а затем пытается получить закрепленное событие. Когда он получит событие залипания, он получит его. Это означает, что слушатель может получить событие дважды:

  1. Первый, потому что слушатель уже зарегистрирован, а postSticky отправляет событие слушателям.
  2. Второй, потому что во время регистрации уже обнаружено липкое событие, которое было размещено postSticky
need to investigate

Самый полезный комментарий

removeStickyEvent может решить эту проблему
EventBus.getDefault (). RemoveStickyEvent (NotifyToJoinEvent.class);

Все 3 Комментарий

Вы решили свою проблему?

Я использовал quickfix. Я перегрузил методы registerSticky (Object), registerSticky (Object, int), postSticky (Object) в классе EventBus. И сделал их синхронизированными, чтобы избежать состояния гонки, описанного выше. Поскольку это было быстрое исправление и, возможно, есть лучший способ решения, я не отправлял патч.

public class EventBusWithStickyFix extends EventBus {

<strong i="8">@Override</strong>
public synchronized void registerSticky(Object subscriber) {
    super.registerSticky(subscriber);
}

<strong i="9">@Override</strong>
public synchronized void registerSticky(Object subscriber, int priority) {
    super.registerSticky(subscriber, priority);
}

<strong i="10">@Override</strong>
public synchronized void postSticky(Object event) {
    super.postSticky(event);
}

}

removeStickyEvent может решить эту проблему
EventBus.getDefault (). RemoveStickyEvent (NotifyToJoinEvent.class);

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

DavidEdwards picture DavidEdwards  ·  11Комментарии

ANewAnonymous picture ANewAnonymous  ·  4Комментарии

gsteigert picture gsteigert  ·  5Комментарии

liaohuyu picture liaohuyu  ·  4Комментарии

onomated picture onomated  ·  12Комментарии