andorid jar/庫源碼解析之EventBus

目錄:andorid jar/庫源碼解析 html

EventBus:

  做用:

    用於不一樣Activity,Service等之間傳遞消息(數據)。java

  栗子:

A頁面:onCreate定義   EventBus.getDefault().register(this);android

  onDestroy定義 EventBus.getDefault().unregister(this);緩存

       添加public方法,一個Object參數(全部繼承與Object的對象),用於接收消息通知。post

B頁面:使用  EventBus.getDefault().post(new 對象);  通知消息(這個時候,若是是同一個類型對象,A中的方法能夠收到通知)this

  源碼解讀:

EventBus.getDefault()

  使用,雙重判斷,建立/獲取一個EventBus對象。spa

EventBus.getDefault().register(

  一、註冊參數類對象,到EventBus的緩存中,線程

  二、保存當前類,包含 Subscribe 註釋的public方法(且改方法只有一個參數)code

  三、同時按照傳遞對象的類型(消息類型),對數據進行在分類存儲,便於查找。htm

  四、而後循環,當前類的父類,一樣的操做,直到,父類StartWith  android.、androidx.、java.、javax. 跳出循環

EventBus.getDefault().unregister(

  一、移除註冊的對象,和方法信息,和註冊的方法成員的類型對應的類信息。

EventBus.getDefault().post(

  一、從記錄註冊表中查找,當前參數對象對應的註冊類集合,數據記錄的時候,保存的能夠被調用的集合

  二、進行循環調用。已註冊方法(知道cancelEventDelivery 被觸發,或者循環完成)。

  三、方法有多種調用模式,其實內部就四種調用方式:a、直接調用方法。b、主線程,使用自定義Handler來調用方法。c、使用新建線程,來調用方法。d、線程池來調用方法。

   引入:

implementation 'org.greenrobot:eventbus:3.1.1'
相關文章
相關標籤/搜索