• EventBus
    • EventBus消息接收者注册流程
    • EventBus Post流程

    EventBus

    EventBus消息接收者注册流程

    EventBus - 图1

    EventBus Post流程

    EventBus - 图2

    postToSubscription()在这个方法中,实现了从发布者到调用者的调用过程。在这里有很重要的几个分支:

    • Main:在主线程中执行。

      • 如果当前线程(post线程)是主线程,则直接invoke;
      • 如果当前线程(post线程)不是主线程,则将消息放入一个HandlerPosterPendingPostQueue的消息队列中,然后通过主线程的Handler发送消息,最好在Handler.HandleMessage中调用EventBus.invokeSubscriber,来让订阅方法在主线程中执行。
    • BackGround:在后台线程执行。

      • 如果当前线程(post线程)不是主线程,则直接invoke;
      • 如果当前线程(post线程)是主线程,则将消息放入BackgroundPoster.PendingPostQueue的消息队列中,由于该Poster实现了接口Runable,于是将该Poster放入线程池中执行,在线程中调用EventBus.invokeSubscriber
    • Async:异步执行。将消息放入AsyncPoster中,然后将该Poster放入线程池并调用EventBus.invokeSubscriber