RxBus进阶------基于RxJava2.x实现以注解的方式传递消息

来源:互联网 发布:msn软件 编辑:程序博客网 时间:2024/05/20 21:23

之前已经简单介绍过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'


在程序入口加上对象的注册,在程序出口注销对象,具体实现类似如下:

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    RxBus.register(this);    }@Overrideprotected 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,无参方法也可以

@Subscribepublic 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());    }


@Rxthread可设置订阅方法的运行线程,线程支持RxJava中提供的6种线程:

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使用注解实现消息传递机制今天就讲到这里了,谢谢诶





阅读全文
0 0
原创粉丝点击