android eventbus回调,Android必知必会EventBus之使用篇
如果一个Android研发工程师,连EventBus都没有听说的,那可能是一个假的工程师。本问是Android攻城狮必备肉食食品,请务须按时食用。
EventBus,是基于事件总线的发布/订阅模式。具有超高解耦和简洁,是Android攻城狮开发必备技能。在Android开发中,常用在不同界面更新数据,达到数据同步变化,同时,也可在不同线程之间传递数据,能有效加速APP的开发。
在此,恭维的双手递上EventBus的Github地址,请慢。慢食用
模型
项目中导入库
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了,可以上手实战了!!!!
更多推荐

所有评论(0)