android EventBus 3.0 简单使用
来源:互联网 发布:js 文本框 数值合计 编辑:程序博客网 时间:2024/06/08 18:21
EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这里的事件可以理解为消息。事件传递既可以用于Android四大组件间通讯,也可以用于异步线程和主线程间通讯等。
传统的事件传递方式包括:Handler、BroadcastReceiver、Interface回调,相比之下EventBus的有点是代码简洁,使用简单,并将事件发布和 订阅充分解耦。
概念
事件Event: 又可成为消息,其实就是一个对象,可以是网络请求返回的字符串,也可以是某个开关状态等等。事件类型EventType是指事件所属的Class。
事件分为一般事件和Sticky事件,相对于一般事件,Sticky事件不同之处在于,当事件发布后,再有订阅者开始订阅该类型事件,依然能收到该类型事件的最近一个Sticky事件。
订阅者Subscriber: 订阅某种事件类型的对象,当有发布者发布这类事件后,EventBus会执行订阅者的onEvent函数,这个函数叫事件响应函数。订阅者通过register接口订阅某个事件类型,unregister接口退订。订阅者存在优先级,优先级高的订阅者可以取消事件继续向优先级低的订阅者分发,默认所有订阅者优先级都为0。
发布者Publisher: 发布某事件的对象,通过post接口发布事件。
GitHub地址
EventBus源码:https://github.com/greenrobot/EventBus
基本使用
自定义一个事件类
public class TestEvent { private String mMsg; public TestEvent(String str){ mMsg = str; } public String getMsg(){ return mMsg; }}
在要接受消息的页面注册
EventBus.getDefault().register(this);
接收消息的方法
@Subscribepublic void onEvent(TestEvent event) {/* Do something */};
@Subscribepublic void onEventMainThread(TestEvent event) {/* Do something */};
@Subscribepublic void onEventBackground(TestEvent event) {/* Do something */};
@Subscribepublic void onEven(TestEvent event) {/* Do something */};
发送消息
EventBus.getDefault().post(event);
取消注册
EventBus.getDefault().unregister(this);
实例
下面我们来实现一个具体的例子来介绍EventBus的基本使用。
需求如下:在MainActivity中注册EventBus事件,并实现事件响应方法,当点击MainActivity中的按钮时跳转到SecondActivity,当点击SecondActivity中的按钮时向MainActivity发送Event事件,当MainActivity收到事件后,将事件内容显示在TextView中。
EventBus的事件订阅函数
类别
在上面的例子中,我们再注解@Subscribe(threadMode = ThreadMode.MAIN)
中使用了ThreadMode.MAIN这个模式,表示该函数在主线程即UI线程中执行,实际上EventBus总共有四种线程模式,分别是:
onEventMainThread:表示无论事件是在哪个线程发布出来的,该事件订阅方法onEvent都会在UI线程中执行,这个在Android中是非常有用的,因为在Android中只能在UI线程中更新UI,所有在此模式下的方法是不能执行耗时操作的。
onEvent:表示事件在哪个线程中发布出来的,事件订阅函数onEvent就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
onEventBackground:表示如果事件在UI线程中发布出来的,那么订阅函数onEvent就会在子线程中运行,如果事件本来就是在子线程中发布出来的,那么订阅函数直接在该子线程中执行。
onEventAsync:使用这个模式的订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程来执行订阅函数。
- android EventBus 3.0 简单使用
- Android EventBus简单使用
- EventBus 《二》 Android EventBus的简单使用
- EventBus 3.0 简单使用
- Android EventBus的简单使用
- Android EventBus的简单使用
- android EventBus的简单使用
- Android EventBus 的简单使用
- Android Eventbus 3简单使用
- Android 开发EventBus简单使用
- Android EventBus 3.0使用
- EventBus在Android中的简单使用
- Android框架之EventBus的简单使用
- Android之EventBus的简单使用
- Android开发EventBus最简单的使用
- EventBus的简单使用
- eventbus简单使用
- EventBus的简单使用
- Junit与spring的整合
- Linux 磁盘管理:df,du,fdisk,mkfs,fsck
- 将C++数字类型转换成字符串
- Redis启动多端口、运行多实例
- 牛顿法与拟牛顿法学习笔记(二)拟牛顿条件
- android EventBus 3.0 简单使用
- 前台页面 轮播 字体 也可轮播图片 但是this.stop()在 火狐浏览器中不兼容 其他可以
- ListView的性能优化-convertView和viewHolder
- main方法
- 一元三次方程求根公式
- 诠释了继承类之间构造器(有参、无参)、对象初始化块和静态初始化块之间的关系及调用顺序
- cpp 4.17
- Maven-“Buliding workspace”has encountered a problem.Error occurred during the build异常
- 学习Sping MVC模式