事件总线的好处在于方便组件之间的交互,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. 【java+selenium】网易云音乐刷累计听歌数

    背景应该是在去年的时候,刷知乎看到一个问题,大概是说怎么刷网易云音乐个人累计听歌数,然后有一个高赞回答,贴了一段js代码,直接在浏览器console执行就可以了.当时试了下,直接一下子刷了有好几万.悲 ...

  2. Dynamic CRM 2015学习笔记(5)CRM 2015 导入 OData Query Designer 解决方案

    以前一直使用OData Query Designer来生成.验证odata查询字符串,本想把它导入到CRM 2015的环境里,但报错: 到MSDN上发现太老版本的solution确实不能再导入到crm ...

  3. day27

    27.01 反射(类的加载概述和加载时机) 1.类的加载 当程序要使用某个类时,如果该类还未加载到内存中,系统会通知加载,连接,初始化三步来实现对这个类初始化 a.加载 是指将.class文件读入内存 ...

  4. [APIO2013]机器人(斯坦纳树)

    题目描述 VRI(Voltron 机器人学会)的工程师建造了 n 个机器人.任意两个兼容的机 器人站在同一个格子时可以合并为一个复合机器人. 我们把机器人用 1 至 n 编号(n ≤ 9).如果两个机 ...

  5. bzoj3756pty的字符串(后缀自动机+计数)

    题目描述 题解 我们可以先对trie树建出广义SAM,然后维护一下right集合大小(注意right集合在广义SAM上的维护方式). 然后把匹配穿往广义SAM上匹配,假设现在匹配到了x节点,那么x的所 ...

  6. 课后选做题:MyOD

    目录 OD命令了解 MyOD实现 OD命令了解 作用:od命令用于输出文件的八进制.十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符.常见的文件为文本文件和二进制文件.此 ...

  7. MySQL命令,一篇文章替你全部搞定

    MySQL命令,一篇文章替你全部搞定 MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等.而这两个方面又 ...

  8. ftp 两台服务器传输文件 apache

    import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputS ...

  9. bzoj2194 快速傅里叶之二

    题意:对于k = 0 ... n求 解: 首先把i变成从0开始 我们发现a和b的次数(下标)是成正比例的,这不可,于是反转就行了. 反转b的话,会发现次数和是n + k,这不可. 反转a就很吼了. 这 ...

  10. layer.open窗口自适应问题

    宽高度 area : ['100%', '100%']同时取消layer.full(index)就能自适应