Android - github EventBus

转载至: Android EventBus源码解析 带你深入理解EventBus 

EventBus
1、注册:      EventBus.getDefault().register(this);           //this:Activity
2、解除注册:EventBus.getDefault().unregister(this);    //this:Activity
3、发布事件:EventBus.getDefault().post(new Event());    //Event为自定义类型
4、接收事件:

  onEventMainThread(Event e)   接收事件在UI线程中执行;
  onEvent                                发布事件和接收事件线程在同一个线程;
  onEventBackgroundThread      UI线程中发布事件,onEventBackground会在子线程中运行;事件在子线程中发布,接收也在子线程执行;
  onEventAsync                        创建新的线程执行onEventAsync;

进阶:
注册EventBus时,将扫描类中onEventXX开头的函数(分别判断了是否以onEvent开头,是否是public且非static和abstract方法,是否是一个参数。如果都复合,才进入封装的部分),
由Map持有(键:事件参数类型,值:onEventXX方法)
产生消息时,EventBus如何调用处理函数?根据消息的类型

 

case MainThread:

首先去判断当前如果是UI线程,则直接调用;否则: mainThreadPoster.enqueue(subscription, event);把当前的方法加入到队列,然后直接通过handler去发送一个消息,在handler的handleMessage中,去执行我们的方法。说白了就是通过Handler去发送消息,然后执行的。

case BackgroundThread:

如果当前非UI线程,则直接调用;如果是UI线程,则将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用

executorService = Executors.newCachedThreadPool();。

case Async:

将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用;线程池与BackgroundThread用的是同一个。

这么说BackgroundThread和Async有什么区别呢?

BackgroundThread中的任务,一个接着一个去调用,中间使用了一个布尔型变量handlerActive进行的控制。

Async则会动态控制并发。

 

posted @   chenyizh  阅读(246)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示