Eventbus: Los eventos fijos se reciben varias veces

Creado en 25 nov. 2013  ·  3Comentarios  ·  Fuente: greenrobot/EventBus

Cuando trabajaba con eventos pegajosos, noté que recibía eventos varias veces. Este fue el caso en el que el registro y la publicación de eventos ocurren al mismo tiempo. Eché un vistazo rápido al código. En el método postSticky noté que el bloqueo del objeto stickyEvents se libera inmediatamente después de poner un evento fijo. Luego, el evento se envía a los oyentes actuales.
Para registrarse, el oyente se registra primero para recibir eventos y luego intenta obtener el evento fijo. Cuando reciba el evento pegajoso, lo recibirá. Esto significa que un oyente puede obtener un evento dos veces:

  1. El primero porque el oyente ya está registrado y el postSticky publica el evento a los oyentes.
  2. Una segunda porque durante el registro ya se encontró el evento pegajoso que fue colocado por el postSticky
need to investigate

Comentario más útil

removeStickyEvent puede solucionar este problema
EventBus.getDefault (). RemoveStickyEvent (NotifyToJoinEvent.class);

Todos 3 comentarios

¿Resolviste tu problema?

Usé una corrección rápida. Sobrecargué los métodos registerSticky (Object), registerSticky (Object, int), postSticky (Object) en la clase EventBus. Y los sincronicé para evitar la condición de carrera que describí anteriormente. Debido a que fue una solución rápida y tal vez haya una mejor manera de resolverlo, no envié un parche.

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 puede solucionar este problema
EventBus.getDefault (). RemoveStickyEvent (NotifyToJoinEvent.class);

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

gsteigert picture gsteigert  ·  5Comentarios

oky2abbas picture oky2abbas  ·  6Comentarios

kyze8439690 picture kyze8439690  ·  4Comentarios

ANewAnonymous picture ANewAnonymous  ·  4Comentarios

ningjiaqi picture ningjiaqi  ·  7Comentarios