事件总线的好处在于方便组件之间的交互,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. bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算

    1. bit 电脑记忆体中最小的单位,在二进位电脑系统中,每1bit 可以代表0 或 1 的数位讯号. 2. Byte 字节单位,一般表示存储介质大小的单位,一个B(常用大写的B来表示Byte)可代表 ...

  2. opencontrail-vrouter命令

    vif命令 vrouter需要vrouter接口(vif)来转发流量.使用vif命令查看vrouter已知的接口. 注意: 仅在OS(Linux)中使用接口不足以进行转发.相关接口必须添加到vrout ...

  3. 协同过滤算法 teamCF

    http://www.infoq.com/cn/articles/recommendation-algorithm-overview-part02

  4. [SDOI2010]大陆争霸

    幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举击败杰森国 ...

  5. Sublime使用小记

    Jason转换插件: 多行编辑快捷键:Ctrl A全选,再按下 Ctrl Shift L (Command Shift L) 即可同时编辑这些行:鼠标选中文本,反复按 CTRL D (Command ...

  6. A1138. Postorder Traversal

    Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and in ...

  7. webpack 非严格模式设置 npm i babel-plugin-transform-remove-strict-mode

    安装插件:npm i babel-plugin-transform-remove-strict-mode 在.babelrc文件的插件项添加:"transform-remove-strict ...

  8. django 配置media 存放调用 图片、图标等文件

    一.需求分析: 一般在网站开发中,有很多类似于用户头像.用户上传的文件,这些经常要改变的媒体文件,需要有一个地方存放,于是就需要media目录,起到跟static类似的功能. 二.在settings. ...

  9. 简单ATM系统

    模拟实现一个ATM + 购物商城程序1.额度 15000或自定义2.实现购物商城,买东西加入 购物车,调用信用卡接口结账3.可以提现,手续费5%4.每月22号出账单,每月10号为还款日,过期未还,按欠 ...

  10. Codeforces Round #523 (Div. 2)

    Codeforces Round #523 (Div. 2) 题目一览表 来源 考察知识点 完成时间 A Coins cf 贪心(签到题) 2018.11.23 B Views Matter cf 思 ...