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()); }
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使用注解实现消息传递机制今天就讲到这里了,谢谢诶
- RxBus进阶------基于RxJava2.x实现以注解的方式传递消息
- RxBus 基于 RxJava1.x 实现消息传递机制
- 基于Rxjava2的事件总线:Rxbus
- RxBus的使用(基于RxJava2.0)
- 基于Rxjava2的事件总线:Rxbus
- 基于RxJava2的RxBus,打造属于你自己的EventBus
- Hibernate3.X实现基于CLOB字段类型的注解方式:
- RxBus基于Rxjava2.0---支持Sticky事件
- RxBus在rxjava2.0 的使用
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递
- 基于RxJava的RxBus
- 基于Rxrelay的RxBus
- 【笔记】RxJava2.0新特性简单介绍并实现RxBus
- rxbus的实现
- 基于TCP实现简单的客户端服务端的消息传递
- 基于UDP实现简单的客户端服务端的消息传递
- 基于Bundle的消息传递
- BSP编程模型(以NMF为例,试验基于消息传递的模型BSP过程)
- JS插件Fancytree使用分享及源码分析
- 在线考试题库型App
- Shell脚本基础2-变量和备注
- Java大数据处理(BigInteger)
- 1.11编程基础之二分查找 04:网线主管
- RxBus进阶------基于RxJava2.x实现以注解的方式传递消息
- MYSQL常用 存储引擎简述
- 【unity3d学习笔记】unity中创建全局变量
- codeforces——230A——Dragons
- 排序(4)希尔排序
- c# winform 反射
- error: could not create '/usr/local/lib/python2.7/dist-packages/jieba': Permission denied
- 安卓学习笔记(八):进程和线程 跟着API指南来学习
- STL常用函数(转自TiWalker)