1.初始化
eventbus.getdefatult(),單例模式初始化。
public
static eventbus getdefault() }}
return instance;
}
傳入乙個預設builder 進行初始化
public
eventbus()
eventbus(eventbusbuilder builder)
2.註冊、取消註冊
通過subscribermenthodfinder找到所有類 父類中的@subscriber的方法。
public
void
register(object subscriber)
}
}
subscriptionsbyeventtype 鍵 eventtype(事件型別) 值 所有註冊過該事件的物件 讀寫分離cow list
typesbysubscriber 鍵 註冊物件 值 物件下所有註冊事件
stickyevents sticky事件儲存
private
void
subscribe(object subscriber, subscribermethod subscribermethod) else
}int size = subscriptions.size();
for (int i = 0; i <= size; i++)
}
list> subscribedevents = typesbysubscriber.get(subscriber);
if (subscribedevents == null)
subscribedevents.add(eventtype);
if (subscribermethod.sticky)
}} else
}}
取消註冊
subscriptionsbyeventtype typesbysubscriber 將註冊的全部事件從兩個map中刪除。
public synchronized void
unregister(object subscriber)
typesbysubscriber.remove(subscriber);
} else
}
private
void
unsubscribebyeventtype(object subscriber, class<?> eventtype) }}
}
3.post
public
void
post(object event)
try
} finally
}}
最後通過該方法完成傳送
private
void
posttosubscription(subscription subscription, object event, boolean ismainthread) else
break;
case main_ordered:
if (mainthreadposter != null) else
break;
case background:
if (ismainthread) else
break;
case async:
asyncposter.enqueue(subscription, event);
break;
default:
throw
new illegalstateexception("unknown thread mode: " + subscription.subscribermethod.threadmode);
}}
vue原始碼之 eventBus原理
vue中eventbus可以用來進行任何元件之間的通訊,我們可以把eventbus當成乙個管道,這個管道兩端可以接好多元件,兩端的任何乙個元件都可以進行通訊。其實這個管道就是vue例項,例項中的 on,off,emit方法來實現此功能。先通過簡單例子看看eventbus怎麼用。vue.js scri...
VUE原始碼分析之eventBus原理
vue中eventbus可以用來進行任何元件之間的通訊,我們可以把eventbus當成乙個管道,這個管道兩端可以接好多元件,兩端的任何乙個元件都可以進行通訊。其實這個管道就是vue例項,例項中的 on,off,emit方法來實現此功能。還是老樣子,先通過簡單例子看看eventbus怎麼用。我們例項化...
EventBus分析原始碼
public static eventbus getdefault return defaultinstance 這裡是註冊訂閱者的地方,同樣的註冊方式有這麼 它們之間最主要的區別就是引數的不同。在實現上它們都是呼叫void register object subscriber,boolean st...