Eventbus: Eventos fixos são recebidos várias vezes

Criado em 25 nov. 2013  ·  3Comentários  ·  Fonte: greenrobot/EventBus

Ao trabalhar com eventos fixos, percebi que recebi eventos várias vezes. Esse foi o caso em que o registro e a postagem dos eventos acontecem ao mesmo tempo. Dei uma olhada rápida no código. No método postSticky, percebi que o bloqueio no objeto stickyEvents é liberado imediatamente após colocar um evento sticky. Em seguida, o evento é postado para os ouvintes atuais.
Para se registrar, o ouvinte é primeiro registrado para receber eventos e depois tenta obter o evento sticky. Quando receber o evento pegajoso, ele o receberá. Isso significa que um ouvinte pode obter um evento duas vezes:

  1. O primeiro porque o listener já está cadastrado e o postSticky posta o evento para os listeners.
  2. Um segundo porque durante o registro do evento sticky já foi encontrado que foi colocado pelo postSticky
need to investigate

Comentários muito úteis

removeStickyEvent pode corrigir esse problema
EventBus.getDefault (). RemoveStickyEvent (NotifyToJoinEvent.class);

Todos 3 comentários

Você resolveu o seu problema?

Eu usei uma correção rápida. Eu sobrecarreguei os métodos registerSticky (Object), registerSticky (Object, int), postSticky (Object) na classe EventBus. E os fiz sincronizados para evitar a condição de corrida que descrevi acima. Como foi uma solução rápida e talvez haja uma maneira melhor de resolvê-lo, não enviei um patch.

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 pode corrigir esse problema
EventBus.getDefault (). RemoveStickyEvent (NotifyToJoinEvent.class);

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

DavidEdwards picture DavidEdwards  ·  11Comentários

adhamenaya picture adhamenaya  ·  3Comentários

rahulkulhalli picture rahulkulhalli  ·  9Comentários

oky2abbas picture oky2abbas  ·  6Comentários

~
Liam6666 picture Liam6666  ·  5Comentários