RxBus开源地址:https://github.com/AndroidKnife/RxBus
参考文章: 1. Rxbus事件交互
2. 关于RxBus的一些使用心得
主要作用
使用注解的方式实现页面间/页面内传值,可以使用tag对消息进行标记,可以指定线程。
实践使用
参照RxBus官方文档,将RxBus引入工程
STEP1 :gradle 引入依赖 compile 'com.hwangjr.rxbus:rxbus:1.0.3'
如果工程中使用了 AndroidKnife/Utils/timber,需要将依赖修改成如下:
compile ('com.hwangjr.rxbus:rxbus:1.0.3') {
exclude group: 'com.hwangjr.utils', module: 'timber'
}
STEP2: 直接使用架包提供的 com.hwangjr.rxbus.RxBus 或 自己写一个RxBus单例(官方推荐),实现如下:
public static final class RxBus {
private static Bus sBus;
public static synchronized get() {
if (sBus == null) {
sBus = new Bus();
}
return sBus;
}
}
STEP3: 在Activty/Fragment 中使用RxBus,这里的this不是特指Activity,所以在Fragment中不需要用getActivity();(参考2)
在onCreate()中调用RxBus.get().register(this); 进行注册操作。
在onDestory()中进行RxBus.get().unregister(this); 解绑操作。
STEP4: 在任何需要监听处理事件的地方,添加如下代码,实现收到消息的处理事件:
@Subscribe
public void Function(String param) { // 这里也可以写成(String tag, Object param)
// TODO
}
STEP5: 在需要发送消息的地方使用 RxBus.get().post(param); or RxBus.get().post(tag, param); // post发消息是主线程
PS:还有一种使用注解发消息的方式,这种方式貌似只适用于在页面初始化的时候,不能手动控制,但是可以指定线程和tag
例:
监听实现
//接收一个列表参数,并且限制这个接收线程是IO,标记为BusAction.EAT_MORE ,标记需要和发送者一致,线程不要需要
@Subscribe(
thread = EventThread.MAIN_THREAD,
tags = { @Tag(BusAction.EAT_MORE) }
)
public void receiveFunction(Object param) {
// TODO
}
消息发送
@Produce
public Object sendFunction() {
// TODO
return param;
}