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

之前已经简单介绍过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());
    }


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





你可能感兴趣的:(Android)