RxBus for Android

通過(guò)RxBus來(lái)實(shí)現(xiàn)事件的通知和訂閱,簡(jiǎn)化應(yīng)用組件間的通信,解耦事件的發(fā)送者和接收者,避免復(fù)雜和容易出錯(cuò)的依賴和生命周期的問(wèn)題.

1. 依賴方式Dependency

1.1 Maven

    <dependency>
      <groupId>com.hanzhifengyun</groupId>
      <artifactId>rxbus</artifactId>
      <version>1.0.0</version>
      <type>pom</type>
    </dependency>

1.2 Gradle

compile 'com.hanzhifengyun:rxbus:1.0.0'

2 如何使用Use

2.1 在合適的時(shí)機(jī)注冊(cè)

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //在頁(yè)面創(chuàng)建時(shí)訂閱
    RxBus.getInstance().register(this);
}

2.2 在合適的時(shí)機(jī)解除注冊(cè)

@Override
protected void onDestroy() {
    super.onDestroy();
    //在頁(yè)面銷毀時(shí)解除訂閱,防止頁(yè)面銷毀后導(dǎo)致內(nèi)存溢出
    RxBus.getInstance().unRegister(this);
}

2.3 如何發(fā)送事件

  • 只發(fā)送事件code,不包含數(shù)據(jù),一般用于通知某一事件的發(fā)生

    RxBus.getInstance().send(int code);
    
  • 只發(fā)送事件數(shù)據(jù),不包含code,一般用于所有關(guān)心相同類型數(shù)據(jù)變化的接收者

    RxBus.getInstance().send(Object data);
    
  • 根據(jù)不同code發(fā)送事件數(shù)據(jù),只有相同的code和數(shù)據(jù)類型的接收者才能接收到數(shù)據(jù)

    RxBus.getInstance().send(int code, Object data);
    

2.4 如何接收事件

  1. 在已經(jīng)注冊(cè)過(guò)的類中自定義一個(gè)public方法,方法名隨意,參數(shù)填寫需要接收數(shù)據(jù)的類型.
  2. 在方法上添加注解OnSubscribe,表示接收訂閱的信息:
    • code: 用于區(qū)分發(fā)送的不同事件的標(biāo)識(shí),int類型
    • threadType: 標(biāo)識(shí)事件接收時(shí)回調(diào)在什么線程

2.5 例子:

  1. 只關(guān)心事件類型,不包含數(shù)據(jù)
  • 定義事件類型

    public static final int CODE_PAY_SUCCESS = 3;//支付成功事件
    
  • 發(fā)送事件

    RxBus.getInstance().send(CODE_PAY_SUCCESS);
    
  • 接收事件,并在UI主線程中消費(fèi)

    @OnSubscribe(code = CODE_PAY_SUCCESS,  threadType = ThreadType.UI)
    public void onPaySuccess() {
        //do something after pay success…
    }
    
  1. 只關(guān)心事件數(shù)據(jù)
  • 發(fā)送事件,只包含數(shù)據(jù)

    List<String> dataList = new ArrayList<>();
    dataList.add("a");
    dataList.add("b");
    dataList.add("c");
    RxBus.getInstance().send(dataList);
    
  • 接收數(shù)據(jù),并在IO子線程中消費(fèi)

    @OnSubscribe(threadType = ThreadType. IO)
    public void onDataChanged(List<String> dataList) {
        // do something for data…
    }
    
  1. 只關(guān)心特定的事件類型和特定的數(shù)據(jù)
  • 定義事件類型

    public static final int CODE_LOAD_DATA = 9;//加載數(shù)據(jù)事件
    
  • 發(fā)送事件

    List<String> dataList = new ArrayList<>();
    dataList.add("a");
    dataList.add("b");
    dataList.add("c");
    RxBus.getInstance().send(CODE_LOAD_DATA, dataList);
    
  • 接收數(shù)據(jù),并在CURRENT_THREAD當(dāng)前線程中消費(fèi)

    @OnSubscribe(code = CODE_LOAD_DATA, threadType = 
    ThreadType. CURRENT_THREAD)
    public void onDataChanged(List<String> dataList) {
    // do something for data…
    }
    

具體實(shí)現(xiàn)感興趣的可以查看源碼,希望對(duì)大家的學(xué)習(xí)有所幫助。

項(xiàng)目地址: https://github.com/hanzhifengyun/RxBus

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

相關(guān)閱讀更多精彩內(nèi)容

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