之前已经简单介绍过RxJava1.x的基本特性了,并结合其特性,写了我自己的 RxBus工具,详情可以看我的另一篇文章:
RxBus 基于RxJava1.x实现消息传递机制:http://blog.csdn.net/burn_yourself/article/details/72526628
其实,那已经是我封装的比较简洁的一个工具类了,那是不是这已经是最简洁的呢?有没有更简洁,用起来更好的方法?
答案是:有!
众所周知,RxJava系列已经更新到RxJava2.x了,虽然和1.x分属两个不同的项目,使用上也做了一些改动(此处不表RxJava1.x和RxJava2.x的区别),单毕竟是升级版,于是就想到用RxJava2.x封装出来会好些吗.在网上一翻查找后,发现已经有了一个第三方库,用起来非常简单,代码量少到爆啊。
库链接地址:https://github.com/ViTess/RxBus
此篇文章的编写参考了链接:http://blog.csdn.net/vite_s/article/details/53291704
需要注意的是本依赖库是基于 RxJava2.x和RxAndroid实现的,项目中使用RxJava1.x的同学可能使用本库的时候会出现冲突,当然具体问题还得在代码中处理不是。
好了,下面就对这个注解实现RxBus的库的使用做一个简单的讲解:
首先,是在项目gradle中引入依赖:
compile 'com.github.vitess:rxbus:2.0.1'
annotationProcessor 'com.github.vitess:rxbus-compiler:2.0.1'
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RxBus.register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
RxBus.unregister(this);
}
只需要在已经注册的类中的方法上加上@Subscribe
,并在其中加入区分用的tag,如:
@Subscribe("Test")
public void test(int random) {
Toast.makeText(this, "random:" + random, Toast.LENGTH_SHORT).show();
}
不设置 tag,无参方法也可以
@Subscribe
public void test() {
Toast.makeText(this, "void", Toast.LENGTH_SHORT).show();
}
设置接收方法的运行线程
@Subscribe
@RxThread(ThreadType.IO)
public void rxBusReceive(Object o){
User user= (User) o;
LogUtil.e("===age====="+user.getAge());
LogUtil.e("===name====="+user.getName());
}
MainThread
IO
Computation
Single
NewThread
Trampoline
RxBus以post的方式发送消息,如:
User user=new User();
user.setAge(23);
user.setName("zhangsan");
RxBus.post(user);
关于库的更多的使用方法,以下给个示例:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RxBus.register(this);
//TODO something
...
findViewById(R.id.button).setOnClickListenernew(View.OnClickListener() {
@Override
public void onClick(View v) {
RxBus.post("receiver1", 123);
RxBus.post("This is post to receiver2");
RxBus.post(new Object());
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
RxBus.unregister(this);
}
@Subscribe("receiver1")
@RxThread(ThreadType.IO)
public void receiver1(int random) {
Log.i("RxBus", "receiver1:" + Thread.currentThread().getName());
}
@Subscribe
@RxThread(ThreadType.Single)
public void receiver2(String str) {
Log.i("RxBus", "receiver2:" + Thread.currentThread().getName());
}
@Subscribe
public void receiver3(Object obj) {
Log.i("RxBus", "receiver3:" + Thread.currentThread().getName());
}
}
Ok,关于RxBus使用注解实现消息传递机制今天就讲到这里了,谢谢诶