1. 程式人生 > >[Android] Android RxBus 用法學習總結

[Android] Android RxBus 用法學習總結

pri per 之間 text his 接口 實現 href say

事件總線的好處在於方便組件之間的交互,RxBus不是一個庫,而是使用RxJava實現事件總線的一種思想。

rxbus和eventbus相比較

RxJava 主要做異步、網絡的數據處理,強大之處就是對數據的處理了,而對於處理完後的數據處理是一樣的都是觀察者模式來通知,也可以把 RxJava 進一步封裝出一個 EventBus(RxBus) 庫,二者可以轉換的。

EventBus比較適合僅僅當做組件間的通訊工具使用,主要用來傳遞消息。使用EventBus可以避免搞出一大推的interface,僅僅是為了實現組件間的通訊,而不得不去實現那一推的接口。

如何使用:

一、添加依賴app\build.gradle

compile com.hwangjr.rxbus:rxbus:2.0.0

二、Activity調用

1)使用方式有兩種,直接使用com.hwangjr.rxbus.RxBus或者使用單例模式得到一個對象

public static final class RxBus{
       private static Bus mBus;
       public static synchronized Bus getInstance(){
          if(mBus == null){

              mBus = new Bus();

          }
          
return mBus; } }


2)register和unregister
要在onCreate 和 onDestory 中相繼:

RxBus.get().register(this);
RxBus.get().unregister(this);
如果是在Fragment中類似處理即可!

3)發送和接收

本次只演示註解方式實現的發送和接收

詳見代碼:

package com.jack.testmd;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.hwangjr.rxbus.RxBus;
import com.hwangjr.rxbus.annotation.Subscribe;
import com.hwangjr.rxbus.annotation.Tag;

public class TestRxbusActivity extends AppCompatActivity { private final String TAG1 = "eat"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_rxbus); RxBus.get().register(this); initData(); } private void initData() { RxBus.get().post(this); //方式1)無tag 無參數監聽 RxBus.get().post(TAG1, this); //方式2)tag 無參數監聽 RxBus.get().post("say", "aaa"); //方式3)有tag,有參數 } @Subscribe public void some(Object obj) { Toast.makeText(getApplicationContext(), "some some~", Toast.LENGTH_LONG).show(); } @Subscribe(tags = {@Tag(TAG1)}) public void eat(Object obj) { Toast.makeText(getApplicationContext(), "eat~", Toast.LENGTH_LONG).show(); } //失敗 ,Produce 發送測試 無效 // @Produce(tags = {@Tag("say")}) // public String send1(){ // return "say"; // } @Subscribe(tags = {@Tag("say")}) public void say(Object obj) {//此處obj為發送過來的參數 aaa Toast.makeText(getApplicationContext(), "rec:"+ obj.toString(), Toast.LENGTH_LONG).show(); } @Override protected void onDestroy() { RxBus.get().unregister(this); super.onDestroy(); } }

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10708413.html

轉載請著名出處!謝謝~~

[Android] Android RxBus 用法學習總結