Android事件通知工具:RxBus在Eclipse和AS中的实践
来源:互联网 发布:韩寒 代笔 知乎 编辑:程序博客网 时间:2024/06/17 08:37
相信大家在进行Android开发的时候最头疼的就是这边有一个点击事件,需要传递到其他界面显示结果,或者说有一处变化了需要告诉许多界面去刷新界面。相信经常使用Fragment进行开发的小伙伴们经常会遇到Fragment界面相互影响,相互刷新的各种负责的业务。这些都是我们需要使用到事件通知的场景。
最初我们使用的是Android自身携带的广播Broadcast来解决这个问题,在需要接收的地方注册广播接收监听,然后通过context.sendBroadcast来发送事件,通过Intent来传递数据。这种如果在最初使用的话还是比较简单的,但是如果需要通知的事件多了的话,整个项目里面就都是sendBroadcast以及registerReceiver,广播使用得不好还很容易出现内存泄露,代码的逻辑性以及程序的稳定性将会大打折扣,使用起来也是极其不方便。
后来学习了java的设计模式之观察者模式,自己设计了一套事件通知工具,其实质还是“接口回调监听“,使用起来可以说比广播好了多了,但是嘛,在使用的过程中还是会出现这些或者那些的问题,最主要的问题就是接口回调不能给自由地切换线程,在子线程回调出来的就是子线程,在主线程回调出来的就是主线程,不好进行线程控制。这也是为什么之前EventBus事件工具如此火的原因所在,它可以控制事件触发的子线程还是主线程。
但是仅仅是EventBus根本满足不了我对代码简洁、使用方便、安全的要求。我理想中的事件工具应该是这样的:只需一行代码就可以完成事件动作的注册、只需一行代码就可以完成事件的传递、只需一行代码就可以轻松地注销事件监听,并且可以自由地控制线程,而串联这三个的只需要一个事件TAG即可,后面只需要维护这个事件TAG就行了。不需要像EventBus那样在每个Activity或者Fragment里面写onEventMainThread这种笨笨的代码。那么这样的事件工具真的有吗?当然有啦,那就是接下来我要隆重地推荐以及介绍的RxBus!
RxBus顾名思义是基于RxJava这个目前火得不能再火的项目改造而成的,RxBus继承了RxJava的最大特性:变化【转化】,通过它我们可以轻松地进行线程控制,代码也起来也是极其简洁明了。RxBus的代码很简洁,只有一个java类,如下:
/** * RxBus * * @author xx * */public class RxBus {private ConcurrentHashMap
这里我就不具体阐述RxBus以及RxManager是如何起到事件通知的效果的,想了解的可以自行去了解Rxjava的特性。
这里我只介绍如何使用RxBus。
1、首先是事件动作注册:
RxManager.get().on注册的事件回调后返回的还是当前的线程,RxManager.get().onMainThread注册的事件回调后返回的直接是主线程。
2、其次是事件的通知:
直接调用RxManager.get().post(Event_Key) :不携带数据的事件
RxManager.get().post(Event_Key,object) :携带数据的事件
3、最后就是事件监听的销毁:
直接调用RxManager.get().clear(Event_Key)即可。
以上三部即可完成事件通知的全过程,是不是很方便啊,O(∩_∩)O~~,实在是太给力了!
接下在我将介绍如何在Eclipse以及AS中使用:
Eclipse 需要下载下载rxjava-1.2.4.jar以及rxandroid-0.25.0.jar,并引用依赖即可。下载地址:https://repo1.maven.org/maven2/io/reactivex/rxjava/
需要Eclipse使用Demo的可点击下载(业界良心,不要分)
AS 直接在build.gradle中配置依赖即可:
compile 'io.reactivex:rxjava:1.2.9'compile 'io.reactivex:rxandroid:1.2.1'
- Android事件通知工具:RxBus在Eclipse和AS中的实践
- Android Rxbus事件总线
- eclipse和as 工具下载
- Android技术前沿:RxBus的实践
- Android studio 事件总线RxBus学习总结
- maven在eclipse中的实践
- Android中的通知和自定义通知布局
- Eclipse中的Use as Source Folder的操作在Android Studio中的实现。
- as上签名文件在Android Studio中的.jks文件代替在eclipse时.keystore
- Qt中的消息通知和事件发送
- Android assets文件夹之位置放置和作用( AS 和eclipse中的 )
- Android ButterKnife Zelezny在AS中的使用
- IOS中的事件通知
- DUILib 中的通知事件
- DUILib 中的通知事件
- DUILib 中的通知事件
- Eclipse常用的快捷键在AS中的对应
- Rxbus事件交互
- 为什么wex5中文件下载到本地后,再打开一直出错
- 队列
- Get,Post请求中文乱码问题有效解决方法
- 『ORACLE』rman简单配置(11g)
- android list 排序
- Android事件通知工具:RxBus在Eclipse和AS中的实践
- jquery自定义单选框的方法
- ECMAScript6 ES6语法
- GitHub 详解
- ROC曲线的理解
- android studio运行Kotilin程序出现Error:(5, 8) Unresolved reference: kotlinx 解决办法
- Golang实战-一个聊天室的实现
- myqldump 导入导出数据库
- CyclicBarrier和CountDownLatch的区别