目錄:andorid jar/庫源碼解析 EventBus: 作用: 用於不同Activity,Service等之間傳遞消息(數據)。 慄子: A頁面:onCreate定義 EventBus.getDefault().register(this); onDestroy定義 EventBus.getD ...
EventBus:
作用:
用於不同Activity,Service等之間傳遞消息(數據)。
慄子:
A頁面:onCreate定義 EventBus.getDefault().register(this);
onDestroy定義 EventBus.getDefault().unregister(this);
添加public方法,一個Object參數(所有繼承與Object的對象),用於接收消息通知。
B頁面:使用 EventBus.getDefault().post(new 對象); 通知消息(這個時候,如果是同一個類型對象,A中的方法可以收到通知)
源碼解讀:
EventBus.getDefault()
使用,雙重判斷,創建/獲取一個EventBus對象。
EventBus.getDefault().register(
1、註冊參數類對象,到EventBus的緩存中,
2、保存當前類,包含 Subscribe 註釋的public方法(且改方法只有一個參數)
3、同時按照傳遞對象的類型(消息類型),對數據進行在分類存儲,便於查找。
4、然後迴圈,當前類的父類,同樣的操作,直到,父類StartWith android.、androidx.、java.、javax. 跳出迴圈
EventBus.getDefault().unregister(
1、移除註冊的對象,和方法信息,和註冊的方法成員的類型對應的類信息。
EventBus.getDefault().post(
1、從記錄註冊表中查找,當前參數對象對應的註冊類集合,數據記錄的時候,保存的可以被調用的集合
2、進行迴圈調用。已註冊方法(知道cancelEventDelivery 被觸發,或者迴圈完成)。
3、方法有多種調用模式,其實內部就四種調用方式:a、直接調用方法。b、主線程,使用自定義Handler來調用方法。c、使用新建線程,來調用方法。d、線程池來調用方法。
源碼:https://github.com/greenrobot/EventBus
引入:
implementation 'org.greenrobot:eventbus:3.1.1'