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:
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);
Comentários muito úteis
removeStickyEvent pode corrigir esse problema
EventBus.getDefault (). RemoveStickyEvent (NotifyToJoinEvent.class);