スティッキーイベントを操作しているときに、イベントを複数回受信していることに気付きました。 これは、イベントの登録と投稿が同時に行われる場合でした。 コードをざっと見てみました。 postStickyメソッドで、stickyEventsオブジェクトのロックがstickyイベントを設定した直後に解放されることに気付きました。 次に、イベントが現在のリスナーに投稿されます。
登録の場合、リスナーは最初にイベントを受信するように登録され、その後、スティッキーイベントを取得しようとします。 スティッキーイベントを取得すると、受信します。 これは、リスナーがイベントを2回取得できることを意味します。
問題を解決しましたか?
クイックフィックスを使用しました。 EventBusクラスのregisterSticky(Object)、registerSticky(Object、int)、postSticky(Object)メソッドをオーバーロードしました。 そして、それらを同期させたので、上記の競合状態を回避します。 それは迅速な修正であり、おそらくそれを解決するためのより良い方法があるので、私はパッチを送信しませんでした。
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);
最も参考になるコメント
removeStickyEventはこの問題を修正できます
EventBus.getDefault()。removeStickyEvent(NotifyToJoinEvent.class);