目錄:andorid jar/庫原始碼決議
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'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/7422.html
標籤:Android
