EventBus 簡單原始碼 原理分析

2021-08-15 18:32:26 字數 2106 閱讀 9204

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...