關(guān)于EventBus

EventBus事件發(fā)布-訂閱總線,是用來進(jìn)行Activity、Fragment之間(任何組件間都可以)的通信,可在任意處進(jìn)行訂閱,訂閱后即可接收到對應(yīng)的事件并進(jìn)行操作

1.使用方法

//一般使用默認(rèn)配置,在onCreate中進(jìn)行注冊,最好在onCreate的最后進(jìn)行(在所需組件完成初始化后即可,簡單起見放在最后,否則可能在接收到事件后使用到的組件還未初始化引起空指針錯誤)
EventBus.getDefault().register(this)
//在onDestroy中進(jìn)行注銷
EventBus.getDefault().unregister(this)
  
//在發(fā)送和接收事件之前需要創(chuàng)建事件類,可根據(jù)需求隨意創(chuàng)建(也可使用枚舉類型),例如:
public class ExampleEvent{
    public int example;
}
//或
public enum ExampleEventEnum{
    EXAMPLE_ONE,
    EXAMPLE_TWO
}
  
//使用‘@Subscribe(boolean sticky,ThreadMode,int priority)’注解標(biāo)記訂閱方法用來接收eventBus事件,例如:
@Subscribe(sticky = false,ThreadMode = ThreadMode.MAIN,priority = 0)
public void onEvent(ExampleEvent event){
    XXXXXX;
}
//sticky為粘性標(biāo)記,是否可以接收到粘性事件,粘性的意思就是可以先發(fā)送事件再注冊EventBus也能收到事件
//ThreadMode為線程標(biāo)記,存在POSTING,MAIN,BACKGOUND,ASYNC四種類型。POSTING發(fā)送與接收在同一個線程;MAIN在主線程調(diào)用;BACKGROUND在非主線程接收,如果發(fā)送在非主線程則不會進(jìn)行線程切換;ASYNC為始終都會開啟一個新線程
  
EventBus.getDefault().post(new ExampleEvent())//發(fā)送普通事件
EventBus.getDefault().postSticky(new ExampleEvent())//發(fā)送粘性事件

2.基本原理

1、使用單例模式保持EventBus全局唯一并始終存活

2、保存注冊的Activity(Object類型,一般用在Activity或Fragment等具有生命周期的組件中,方便綁定和解綁),使用反射去查找?guī)в蠤Subscribe注解的方法,保存該方法(Method對象以及注解參數(shù))

3、在使用時發(fā)送post,將該對象存入一個Queue,然后不斷的從該Queue中取出event,查找到對應(yīng)的Acitivity(Object類型)和方法,使用反射進(jìn)行調(diào)用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容