带你从源码解析EventBus

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

普及几个名词

先给大家普及几个名词

  1. Subscriber:事件订阅者,用于接收事件
  2. onEvent:发送者在哪个线程发送的,该方法也在哪个线程中处理事件
  3. onEventMainThread:不管发送者在哪个线程发送的,该方法都会在主线程中处理事件
  4. onEventBackgroundThread:如果发送者是在子线程发送的,那么该方法也在同一个子线程处理事件,如果发送者是在主线程,那么该方法在一个线程池中处理事件
  5. 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值