عند العمل مع الأحداث اللاصقة ، لاحظت أنني تلقيت أحداثًا عدة مرات. كان هذا هو الحال حيث يتم تسجيل الأحداث ونشرها في نفس الوقت. لقد ألقيت نظرة سريعة على الكود. في طريقة postSticky ، لاحظت أنه يتم تحرير القفل على كائن stickyEvents بشكل فوري بعد وضع حدث لزج. ثم يتم نشر الحدث على المستمعين الحاليين.
للتسجيل ، يتم تسجيل المستمع أولاً لتلقي الأحداث وبعد ذلك يحاول الحصول على الحدث اللاصق. عندما يحصل على الحدث اللاصق ، سوف يستقبله. هذا يعني أنه يمكن للمستمع الحصول على حدث مرتين:
هل قمت بحل مشكلتك؟
لقد استخدمت إصلاحًا سريعًا. لقد أفرطت في تحميل أساليب 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) ؛
التعليق الأكثر فائدة
يمكن لـ removeStickyEvent حل هذه المشكلة
EventBus.getDefault (). removeStickyEvent (NotifyToJoinEvent.class) ؛