Android---EventBus详解
来源:互联网 发布:男士发型设计软件推荐 编辑:程序博客网 时间:2024/05/20 12:25
注:EventBus在github上的使用
https://github.com/greenrobot/EventBus
概念:
EventBus是一个发布/订阅的事件总线。它可以让两个组件相互通信,但是它们之间并不相互知晓。 EventBus模式,也被称为 Message Bus模式, 或者 发布者/订阅者(publisher/subscriber)模式。 事件响应有更多的线程选择,EventBus 可以向不同的线程中发布事件。 这里需要理解的是发送事件可以在任何线程中进行,但接收事件需要在特定的线程中处理。你想在哪个线程注册就在哪个线程接收事件,可以是多个地方接收事件消息。哪里有数据,我们可以直接传入事件消息,消息类型是我们自己可以定义的。
传统的传递和EventBus的比较:(四大组件之间传递参数)
Handler、BroadCastReceiver、intent、Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将事件发布和订阅充分解耦。
EventBus使用:
第一步:gradle
compile 'org.greenrobot:eventbus:3.0.0'
第二步:讲解根据生命周期进行取消和注册订阅者
例如: @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); }
第三步:定义事件
public static class MessageEvent { /* Additional fields if needed */ }
第四步:发布事件(两种方法)
需要在你需要获取数据的地方发布事件:普通事件:EventBus.getDefault().post(new MessageEvent());粘性事件:EventBus.getDefault().postSticky(new MessageEvent("test"));
第五步:接收事件(四种)
注意:在注解的里面是含有优先级的,在注解上加上 priority = 优先级数(int值)下面是普通的事件接收,要想接收粘性事件,添加一个参数 @Subscribe(threadMode = ThreadMode.MAIN, sticky = true),根据不同的注解可以分别接收粘性事件,默认就是非粘性事件, 如果是粘性事件,只需要在事件的注解上面加上。(1)那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。在线程模型为PostThread的事件处理函数中尽量避免执行耗时操作,因为它会阻塞事件的传递,甚至有可能会引起ANR。默认是这个线程@Subscribe(threadMode = ThreadMode.POSTING, priority = 1)public void onMessageEventPostThread(MessageEvent messageEvent) { Log.e("PostThread", Thread.currentThread().getName());}(2)那么不论事件是在哪个线程中发布出来的,该事件处理函数都会在UI线程中执行。该方法可以用来更新UI,但是不能处理耗时操作。@Subscribe(threadMode = ThreadMode.MAIN, priority = 2)public void onMessageEventMainThread(MessageEvent messageEvent) { Log.e("MainThread", Thread.currentThread().getName());}(3)那么如果事件是在UI线程中发布出来的,那么该事件处理函数就会在新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件 处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。@Subscribe(threadMode = ThreadMode.BACKGROUND, priority = 3)public void onMessageEventBackgroundThread(MessageEvent messageEvent) { Log.e("BackgroundThread", Thread.currentThread().getName());}(4)那么无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行。同样,此事件处理函数中禁止进行UI更新操作。@Subscribe(threadMode = ThreadMode.ASYNC, priority = 4)public void onMessageEventAsync(MessageEvent messageEvent) { Log.e("Async", Thread.currentThread().getName());}
0 0
- Android EventBus详解
- Android EventBus 使用详解
- Android EventBus使用详解
- Android中EventBus详解
- Android EventBus详解
- Android greenrobot:EventBus详解
- Android EventBus详解
- Android EventBus使用详解
- Android EventBus详解
- Android---EventBus详解
- android-eventbus-使用详解
- Android EventBus使用详解
- Android中开源库EventBus使用详解
- Android中开源库EventBus使用详解
- Android事件总线EventBus详解
- android EventBus详解(一)
- android EventBus详解(二)
- android EventBus详解(三)
- PDF温度计方案
- ROS 开发环境简介
- git 生成ssh 密钥
- MySQL 数据 latin1 编码转换为 utf-8 编码的方法
- spring 框架下使用quartz 定时器
- Android---EventBus详解
- JVM生命周期
- (OK) 话Binder(ServiceManager篇)
- 05C#基础知识总结
- Eclipse中的中文字符显示乱码
- 最新获取几何画板的方法
- Linux 中直接 I/O 机制的介绍
- 可能是东半球最全的RxJava使用场景小结
- git克隆远程项目并创建本地对应分支