Rxbus事件交互
更多内容,关注代码GG微信公众号 :代码GG之家
Rxbus事件交互
源码地址:
https://github.com/luxiaoming/RxBus
demo地址
https://github.com/luxiaoming/RxBusDemo
目标:
使得处理传递数据,不需要接口,直接使用注释关联起来。
使用方法:
第一步
在你的项目gradle文件里面,引入compile 'com.hwangjr.rxbus:rxbus:1.0.3' 导入这个包
有时会出现和其他包冲突,使用:
compile ('com.hwangjr.rxbus:rxbus:1.0.3') {
exclude group: 'com.hwangjr.utils', module: 'timber'
}
排除掉里面的冲突包,具体这个语法,可以搜索 gradle 教程。
第二步
写入一个实例,用来构造Rxbus实例,这个是单例模式存在,一般这个实现是放在app创建里面,然后通过接口获取,全局可以使用。
单例代码:
public final class RxBus {
private static Bus sBus;
public synchronized static Bus get() {
if (sBus == null) {
sBus = new Bus();
}
return sBus;
}
}
然后我们如下使用:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// 注册时会自动从当前类里面拿取注释为@Produce 和 @Subscribe,解析处理,会发送出来消息
//创建的地方注册进来,需要销毁的时候撤销,否则内存泄漏,所以你可以自己封装下baseActivity,完成注册和销毁动作。
RxBus.get().register(this);
//也可以自己使用
RxBus.get().post("hello");
}
@Override
protected void onDestroy() {
super.onDestroy();
//销毁
RxBus.get().unregister(this);
}
static class BusAction
{
public static final String EAT_MORE="eat_more";
public static final String EAT_TEST="eat_test";
}
//接收一个消息,消息区别是通过参数,因此这里接收一个post事件,参数为字串时,这里就可以收到。
@Subscribe
public void eat(String food) {
Toast.makeText(this,food,Toast.LENGTH_SHORT).show();
}
//接收一个列表参数,并且限制这个接收线程是IO,标记为BusAction.EAT_MORE ,标记需要和发送者一致,线程不要需要
@Subscribe(
thread = EventThread.MAIN_THREAD,
tags = {
@Tag(BusAction.EAT_TEST)
}
)
public void eatMore(ArrayList foods) {
// purpose
Toast.makeText(this,"eatMore",Toast.LENGTH_SHORT).show();
}
// @Produce
// public String produceFood() {
// return "This is bread!";
// }
@Produce(
thread = EventThread.IO,
tags = {
@Tag(BusAction.EAT_TEST)
}
)
public ArrayList produceMoreFood() {
ArrayList list =new ArrayList<>();
list.add("This");
list.add("is");
list.add("breads!");
return list;
}
}