如果一个Android研发工程师,连EventBus都没有听说的,那可能是一个假的工程师。本问是Android攻城狮必备肉食食品,请务须按时食用。

EventBus,是基于事件总线的发布/订阅模式。具有超高解耦和简洁,是Android攻城狮开发必备技能。在Android开发中,常用在不同界面更新数据,达到数据同步变化,同时,也可在不同线程之间传递数据,能有效加速APP的开发。

在此,恭维的双手递上EventBus的Github地址,请慢。慢食用

05bc7dbcacde

模型

项目中导入库

implementation 'org.greenrobot:eventbus:3.1.1'

使用EvnetBus三步曲

1、定义消息类型

在这里任何一个实体类都可以哦,没有特别的要求。

public static class MessageEvent { /* Additional fields if needed */ }

2、注册和解注册,一般用在Activity或Fragment的生命周期,具体哪个函数,根据自己需求进行选择哦。如果不再需要数据,一定要进行解注册呢,这是一个程序员必备的素质。

@Override

public void onStart() {

super.onStart();

EventBus.getDefault().register(this);

}

@Override

public void onStop() {

super.onStop();

EventBus.getDefault().unregister(this);

}

定义处理事件类型的方法

该方法需要定义在已注册的EventBus的中,不然接收不到哦。如果注册了EventBus后没有定义带有Subscribe注解的方法也会报错哦。

@Subscribe(threadMode = ThreadMode.MAIN)

public void onMessageEvent(MessageEvent event) {/* Do something */};

该方法必须使用Subscribe注解,public修饰,返回值为void,只能有一个参数(事件类型),不能用static,final修饰。

该方法的回调线程默认跟post线程一致,就是跟发送事件的线程在同一线程,可通过指定threadMode的值进行修改。

值有一下类型

ThreadMode.POSTING:和post线程同一线程,也是默认情况。

ThreadMode.MAIN:在Android主线程回调。如果post线程也是主线程,那么直接回调,会阻塞线程,所以不可做耗时操作。

ThreadMode.MAIN_ORDERED:在Android主线程回调。不同于MAIN,以队列形式被回调,确保不会阻塞线程。

ThreadMode.BACKGROUND:后台线程,post是主线程,订阅方法运行在新的子线程;发布者是子线程,订阅方法运行在post的线程;

ThreadMode.ASYNC:异步执行,订阅方法执行在新的子线程。

sticky,粘性,默认值false。与Android广播机制中的sticky概念相同。注册之后,订阅者可以收到最后一条粘性事件。

priority,优先级。当事件发送后,指定多个订阅者收到事件的顺序。

3、 post事件

发送事件后,对应的订阅者相对应类型的订阅方法都会被回调。然后根据业务需求进行处理。

EventBus.getDefault().post(new MessageEvent());

到此,你已经学会使用EventBus了,可以上手实战了!!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐