EventBus篇一:ThreadMode

来源:互联网 发布:单片机控制继电器 编辑:程序博客网 时间:2024/06/05 00:30

TheadMode

  每一个事件处理方法都有着自己的线程模式(TheadMode)。线程模式决定了EventBus在哪个线程中调用事件处理方法。
  ThreadMode枚举包含四个值:
   - PostThread
   - MainThread
   - BackgroundThread
   - Async

A.PostThread(默认模式)

调用线程:事件发布线程
  当订阅者所关注的变化发生时,EventBus将会在事件所发布的线程中调用订阅者对应的方法。
  因为订阅者在发布事件的线程中被调用,所以这种线程模式可以完全避免线程切换所带来的开销。适用于短时间能够完成并且不限定在主线程的事件处理情景。任何事件处理情景使用这种模式必须保证能够快速地返回结果,否者可能将引起线程阻塞。当发布事件的线程是主线程时,还可能会出现ANR。

B.MainThread

调用线程:Android主线程(UI线程)
  无论发布事件的是哪个线程,订阅者都将在Android主线程(也即UI线程)中被调用。
  任何事件处理场景使用这种模式必须保证快速地返回结果,从而避免阻塞主线程。

C.BackgroundThread

调用线程:事件发布线程或者后台线程
  当发布事件的线程不是主线程时,事件处理方法将会立即在该线程中被调用;如果发布时间的线程是主线程,EventBus会使用一个单例的后台线程调用事件处理函数,该后台线程将会按照时间顺序处理并交付所有的事件。
  任何事件处理场景使用这种模式必须保证快速地返回结果,从而避免阻塞线程。

D.Async

调用线程:异步线程
事件处理方法将会在异步的线程中被调用。该异步线程既不是主线程,也不是事件发布线程。
在该模式下,发布事件不必等待事件处理方法执行完毕。在事件处理方法执行诸如网络请求等需要花费一定时间的任务时,推荐使用该模式。在使用过程中为了限制并发线程的数量,尽量避免在同一时间段内触发过多需要长时间执行的异步处理方法。

EventBus使用线程池来有效地重用异步线程。

0 0
原创粉丝点击