面试题DAY2----eventbus原理

遇到eventbus面试涉及到的源码

在讲解源码之前,先说一下EventBus需要关注的点 - EventBus支持的四种线程模式(ThreadMode):

      示例:

@Subscribe(threadMode = ThreadMode.POSTING)
    public void eventBus(MyEvent myEvent) {
        Toast.makeText(this, "呵呵哒", Toast.LENGTH_SHORT).show();
    }
      a)POSTING(默认):事件在哪个线程发布,就在哪个线程消费,因此要特别注意不要在UI线程进行耗时的操作,否则会ANR;

      b)MAIN:事件的消费会在UI线程。因此,不宜进行耗时操作,以免引起ANR。

      c)BACKGROUND:如果事件在UI线程产生,那么事件的消费会在单独的子线程中进行。否则,在同一个线程中消费。

      d)ASYNC:不管是否在UI线程产生事件,都会在单独的子线程中消费事件。
二: 源码:

 1. 构造方法: 创建构造方法: 通过双重锁的模式创建对象 ;  通过建造者模式创建对象

 2.  注册:这个subscriber就是我们使用EventBus.getDefault().register(this);传入的这个this,比如MainActivity.this。通过反射,查找该Subscriber中,通过@Subscribe注解的方法(消费方法)信息,将这些方法信息封装到SubscriberMethod中,封装的内容包括Method对象、ThreadMode、事件类型、优先级、是否粘性等

 3. 发布与消费事件:  post进行发布 .然后到线程的队列中,然后进行消费事件,消费的时候通过反射和method 调用,这是回到queue队列当中,循环遍历queue中的event 查找可以消费该事件的类和方法,最终他会将事件交给这个类和方法,完成整个消息的发布与消费;

你可能感兴趣的:(面试题DAY2----eventbus原理)