事件总线的好处在于方便组件之间的交互,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 用法学习总结的更多相关文章

  1. Android(java)学习笔记264:Android下的属性动画高级用法(Property Animation)

    1. 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画 ...

  2. Android(java)学习笔记208:Android下的属性动画高级用法(Property Animation)

    1. 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画 ...

  3. 【Android学习】android:layout_weight的用法实例

    对于android:layout_weight的用法,用下面的例子来说明: <LinearLayout xmlns:android="http://schemas.android.co ...

  4. Android(java)学习笔记110:ScrollView用法

    理论部分 1.ScrollView和HorizontalScrollView是为控件或者布局添加滚动条 2.上述两个控件只能有一个孩子,但是它并不是传统意义上的容器 3.上述两个控件可以互相嵌套 4. ...

  5. Android(java)学习笔记134:Handler用法总结 和 秒表案例

    一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如可以用handler发送一个message,然后在handler的线程中 ...

  6. Android(java)学习笔记51:ScrollView用法

    1. 理论部分 (1)ScrollView和HorizontalScrollView是为控件或者布局添加滚动条 (2)上述两个控件只能有一个孩子,但是它并不是传统意义上的容器 (3)上述两个控件可以互 ...

  7. Android(java)学习笔记76:Handler用法总结 和 秒表案例

    一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如可以用handler发送一个message,然后在handler的线程中 ...

  8. 14.Android之Layout布局学习

    Android布局主要有5种,接下来学习总结下. 1) 最常见的线性布局 LinearLayout 线性布局是Android布局中最简单的布局,也是最常用,最实用的布局. android:orient ...

  9. Android(java)学习笔记263:Android下的属性动画(Property Animation)

    1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(fra ...

随机推荐

  1. Apache 开启压缩传输

    在 /etc/httpd/conf/httpd.conf 中添加如下配置: # Enable gzip - by Jerryhuang # <IfModule mod_deflate.c> ...

  2. 「ZJOI2016」旅行者 解题报告

    「ZJOI2016」旅行者 对网格图进行分治. 每次从中间选一列,然后枚举每个这一列的格子作为起点跑最短路,进入子矩形时把询问划分一下,有点类似整体二分 至于复杂度么,我不会阿 Code: #incl ...

  3. windows7安装docker

    因为本机已经安装了git,所以这里取消勾选 配置环境变量 进入到D:\DockerToolbox 将D:\DockerToolbox下的boot2docker.iso 复制到C:\Users\my\. ...

  4. noiac132 B君的第三题 (树形dp)

    传送门 本来想用点分治做,结果root又求不对 算的时候还算错了 我好菜啊 结果szr大佬告诉我是树形dp 我好菜啊!! 我们有$\lceil \frac{x}{k} \rceil = \frac{x ...

  5. luogu1196 银河英雄传说 (并查集)

    并查集,不仅记fa,还记与fa的距离,还记根对应的尾节点 路径压缩的时候更新那个距离就行了 #include<bits/stdc++.h> #define pa pair<int,i ...

  6. ACM-ICPC 2017 Asia Xi'an A XOR (线性基+线段树思想)

    题目链接 题意;给个数组,每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值 题解:线性基不知道的先看这个,一个线性基可以log的求最大值把对应去区间的线性基求出来然后用线段树维护线性 ...

  7. js 判断所选时间(或者当前时间)是否在某一时间段的实现代码

    var time_range = function (beginTime, endTime, nowTime) { var strb = beginTime.split (":") ...

  8. Django(一)自定义web框架

    https://www.cnblogs.com/yuanchenqi/articles/6083427.htm 一 什么是web框架 框架,即framework, 特指为解决一个开放性问题而设计的具有 ...

  9. JavaScript 正整数正则表达式

    function testNumber(){ var yourinputValue=$("#yourinputId").val();  var reg = /^[1-9]\d*$/ ...

  10. IDEA和WebStorm破解教程--激活n年(随时更新)

    首先,打开蓝雨的官网--->http://idea.lanyus.com/,找到这个jar包  之后,去官网下载IDEA--->https://www.jetbrains.com/idea ...