EventBus的简单用法
来源:互联网 发布:中国移动宽带端口查询 编辑:程序博客网 时间:2024/05/24 06:43
EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。如果Activity和Activity进行交互还好说,如果Fragment和Fragment进行交互着实令人头疼,我们会使用广播来处理,但是使用广播稍显麻烦并且效率也不高,如果传递的数据是实体类需要序列化,那么很显然成本会有点高。
1.EventBus概述
EventBus的三要素
EventBus有三个主要的元素需要我们先了解一下:
- Event:事件,可以是任意类型的对象。
- Subscriber:事件订阅者,在EventBus3.0之前消息处理的方法只能限定于onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,他们分别代表四种线程模型。而在EventBus3.0之后,事件处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为POSTING),四种线程模型下面会讲到。
- Publisher:事件发布者,可以在任意线程任意位置发送事件,直接调用EventBus的post(Object)方法。可以自己实例化EventBus对象,但一般使用EventBus.getDefault()就好了,根据post函数参数的类型,会自动调用订阅相应类型事件的函数。
EventBus的四种ThreadMode(线程模型)
EventBus3.0有以下四种ThreadMode:
- POSTING(默认):如果使用事件处理函数指定了线程模型为POSTING,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。在线程模型为POSTING的事件处理函数中尽量避免执行耗时操作,因为它会阻塞事件的传递,甚至有可能会引起ANR。
- MAIN:
事件的处理会在UI线程中执行。事件处理时间不能太长,长了会ANR的。 - BACKGROUND:如果事件是在UI线程中发布出来的,那么该事件处理函数就会在新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
- ASYNC:无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行,同样,此事件处理函数中禁止进行UI更新操作。
3.使用:eventbus主要是分为普通事件和粘性事件,但总体步骤还是一致的:
使用第三方的一个重大步骤就是需要依赖,当然了这也得需要你的程序支持依赖的方式
compile'org.greenrobot:eventbus:3.0.0'
1.自定义一个事件类
- 1
- 2
- 3
2.在需要订阅事件的地方注册事件
- 1
3.发送事件
- 1
4.处理事件
前面我们说过,消息处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为POSTING)。
而且我们一般取消订阅的时候都是在ondestory方法中你那个
5.取消事件订阅
上面呢,是一个普通事件的使用,下面来简单介绍一下粘性事件:粘性事件的使用更加的灵活,亦可以在需要传值的地方发送消息
EventBus.getDefault().postSticky(new MessageEvent("粘性事件"));
只需要在接收的地方注册和取消订阅,接收就可以,而且发送和订阅之间的先后顺序没有要求,其他的使用和普通
事件是一样的。但是不要忘在订阅的时候,提供支持粘性事件
@Subscribe(threadMode = ThreadMode.POSTING,sticky = true)
publicvoidononMoonStickyEvent(MessageEvent messageEvent){
tv_message.setText(messageEvent.getMessage());
}
最后呢:说一下使用的感受,其实粘性和普通之间没有什么大的区别,就看你是如何使用的了,因为普通事件的订阅和
发送是在一起的,简单来说就是需要在失去焦点之后又重新获取焦点,而粘性事件没有要求,使用也比较灵活,但是呢
eventbus的使用需要一个事件类与之交互使用。
- EventBus的简单用法
- EventBus之简单用法
- EventBus 的用法
- EventBus的用法
- EventBus的简单使用
- EventBus的简单使用
- EventBus的简单使用
- EventBus的简单使用
- EventBus的简单使用
- EventBus的简单使用
- EventBus的简单使用
- EventBus的简单使用
- EventBus的简单使用
- 简单的EventBus传值
- EventBus 的简单使用
- EventBus的简单理解
- eventbus的简单使用方法
- EventBus的简单使用
- 如何在VB中设置一个提示框,有"确定","取消"2个按钮
- 一周AI看点 | AI界的体操运动员Atlas上线,第一家金融AI公司纽交所上市
- 都是套路!要毁灭人类、喷马斯克、还获得公民身份的机器人Sophia,真相确是...
- 干货 | 大数据人工智能领域从菜鸟到高手晋级指南
- CComboBox用法总结
- EventBus的简单用法
- iOS开发-APP启动main()调用之前的加载过程
- MFC学习笔记1 建立工程 C数据结构
- vue2.0组件之间的通信
- vl_feat-0.9.20--matlab 2014a--vs2013 配置问题
- 链表问题---单链表的选择排序
- 双向选择列表框
- Java线程面试题(02) Java线程中如何避免死锁
- 毁灭与幸存·《我等不到了》·二