Eventbus: يتم تلقي الأحداث الثابتة عدة مرات

تم إنشاؤها على ٢٥ نوفمبر ٢٠١٣  ·  3تعليقات  ·  مصدر: greenrobot/EventBus

عند العمل مع الأحداث اللاصقة ، لاحظت أنني تلقيت أحداثًا عدة مرات. كان هذا هو الحال حيث يتم تسجيل الأحداث ونشرها في نفس الوقت. لقد ألقيت نظرة سريعة على الكود. في طريقة postSticky ، لاحظت أنه يتم تحرير القفل على كائن stickyEvents بشكل فوري بعد وضع حدث لزج. ثم يتم نشر الحدث على المستمعين الحاليين.
للتسجيل ، يتم تسجيل المستمع أولاً لتلقي الأحداث وبعد ذلك يحاول الحصول على الحدث اللاصق. عندما يحصل على الحدث اللاصق ، سوف يستقبله. هذا يعني أنه يمكن للمستمع الحصول على حدث مرتين:

  1. الأول لأن المستمع مسجل بالفعل ويقوم postSticky بإرسال الحدث إلى المستمعين.
  2. والثاني لأنه أثناء تسجيل الحدث اللاصق وجد بالفعل أنه تم وضعه بواسطة postSticky
need to investigate

التعليق الأكثر فائدة

يمكن لـ removeStickyEvent حل هذه المشكلة
EventBus.getDefault (). removeStickyEvent (NotifyToJoinEvent.class) ؛

ال 3 كومينتر

هل قمت بحل مشكلتك؟

لقد استخدمت إصلاحًا سريعًا. لقد أفرطت في تحميل أساليب 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 التقييمات

القضايا ذات الصلة

ningjiaqi picture ningjiaqi  ·  7تعليقات

liaohuyu picture liaohuyu  ·  4تعليقات

lalit3686 picture lalit3686  ·  9تعليقات

DavidEdwards picture DavidEdwards  ·  11تعليقات

cckroets picture cckroets  ·  16تعليقات