EventBus 3.0使用基础

来源:互联网 发布:自动生成声音软件 编辑:程序博客网 时间:2024/05/20 07:37

EventBus 3.0使用基础

EventBus概述
EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

1、下载EventBus

compile 'org.greenrobot:eventbus:3.0.0'  

Maven

<dependency>      <groupId>org.greenrobot</groupId>    <artifactId>eventbus</artifactId>    <version>3.0.0</version></dependency>  

基本使用

1、首先每个事件写一个实体bean,EventBus就是根据这个实体bean来判断事件分发的

public class EventBusBean{  }

EventBus.getDefault().register(this);
3、实现处理方法

在3.0以前一直是通过以下4个方法名来实现消息处理

a、onEvent

b、onEventMainThread

c、onEventBackgroundThread

d、onEventAsync

每个方法名都有不同的含义

onEvent:如果使用onEvent作为订阅方法,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。

onEventMainThread:如果使用onEventMainThread作为订阅方法,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。

onEventBackground:如果使用onEventBackgrond作为订阅方法,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。

onEventAsync:使用这个函数作为订阅方法,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync. 实现处理方法有4个方法可以实现,不用继承或实现任何接口,只需要在你注册的类中添加方法就行了,当然方法名是有限制的,参数就是你要传递的消息对象

但是3.0以后就不在用这种方式了,而是通过注解的方式

通过注解@Subscribe来确定实现的方法,当然还需要方法的形参,只是把以前的特定方法名改为不特定,而是通过注解,同时通过threadMode来设定线程,一共有4种方式,同以前一样

a、ThreadMode.POSTING 同onEvent

b、ThreadMode.MAIN 同onEventMainThread

c、ThreadMode.BACKGROUND 同onEventBackground

d、ThreadMode.ASYNC 同onEventAsync

如:@Subscribe(threadMode = ThreadMode.POSTING)

比如我们用onEventMainThread来注册,这样onEventMainThread方法体会在UI线程去执行

public void onEventMainThread(EventBusBean bean){  ...}4、发送消息EventBus.getDefault().post(new EventBusBean());  

或者

EventBus.getDefault().postSticky(new EventBusBean());  

5、取消注册

当一个类被销毁或者生命周期完成时,我们要及时取消注册,以免造成内存泄露

EventBus.getDefault().unregister(this);  
0 0
原创粉丝点击