本文主要是介绍带你从源码解析EventBus,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1EventBus的使用
1.1如何注册
1.2普及几个名词
1.3如何使用
2源码分析
3方法的权限符
EventBus的使用
//注册订阅者
如何注册
//如何获取EventBus对象
第一种方式:推荐
EventBus.getDefault().register(this);//第一种方式获取EventBus对象
这种方式是通过系统的方式单例获取一个EventBus对象
public static EventBus getDefault() {if(defaultInstance == null) {Class var0 = EventBus.class;synchronized(EventBus.class) {if(defaultInstance == null) {defaultInstance = new EventBus();}}}return defaultInstance;
}
第二种方式:不推荐
EventBus build = EventBus.builder().build();
//第二种方式获取EventBus对象,这种不推荐,因为如果要是
用的话得自己去维护这个EventBus对象。不方便,因为消息的发送必须是一个EventBus对象
//将当前的MainActivity作为一个订阅者
EventBus.getDefault().register(this);
这就是将当前的MainActivity作为一个订阅者,(x消息接受者),subscribe
普及几个名词
先给大家普及几个名词
- Subscriber:事件订阅者,用于接收事件
- onEvent:发送者在哪个线程发送的,该方法也在哪个线程中处理事件
- onEventMainThread:不管发送者在哪个线程发送的,该方法都会在主线程中处理事件
- onEventBackgroundThread:如果发送者是在子线程发送的,那么该方法也在同一个子线程处理事件,如果发送者是在主线程,那么该方法在一个线程池中处理事件
- onEventAsync:不管发送者在哪个线程发送的,该方法都在线程池中执行
为了验证这个我们分别在主线程和子线程发送消息,看下四个回调方法的执行情况
下面是SecondActivity主线程发送消息的log
11-01 10:15:10.580 1065-1065/com.example.zew.eventbusdemo E/MainActivity: onEvent:ThreadName=main接受到了消息:com.example.zew.eventbusdemo.MyEvent1@ade61ae0
11-01 10:15:10.580 1065-1139/com.example.zew.eventbusdemo E/MainActivity: onEventAsync:ThreadName=pool-1-thread-1接受到了消息:com.example.zew.eventbusdemo.MyEvent1@ade61ae0
11-01 10:15:10.590 1065-1065/com.example.zew.eventbusdemo E/MainActivity: onEventMainThread:ThreadName=main接受到了消息:com.example.zew.eventbusdemo.MyEvent1@ade61ae0
11-01 10:15:10.590 1065-1140/com.example.zew.eventbusdemo E/MainActivity: onEventBackgroundThread:ThreadName=pool-1-thread-2接受到了消息:com.example.zew.eventbusdemo.MyEvent1@ade61ae0
我们可以看出 onEvent:ThreadName=main,因为发送者在哪个线程发送的,该方法也在哪个线程中处理事件
onEventMainThread:ThreadName=main因为不管发送者在哪个线程发送的,该方法都会在主线程中处理事件
onEventAsync:ThreadName=pool-1-thread-1,因为不管发送者在哪个线程发送的,该方法都在线程池中执行
下面是子线程发送消息的log
11-01 10:19:12.490 1065-2656/com.example.zew.eventbusdemo E/MainActivity: onEvent:ThreadName=Thread-70接受到了消息:com.example.zew.eventbusdemo.MyEvent1@adea0b58
11-01 10:19:12.490 1065-2656/com.example.zew.eventbusdemo E/MainActivity: onEventBackgroundThread:ThreadName=Thread-70接受到了消息:com.example.zew.eventbusdemo.MyEvent1@adea0b58
11-01 10:19:12.500 1065-1065/com.example.zew.eventbusdemo E/MainActivity: onEventMainThread:Th
这篇关于带你从源码解析EventBus的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!