EventBus的初步学习及使用

版权声明:欢迎来到我的个人博客:http://blog.N0tExpectErr0r.cn https://blog.csdn.net/qq_21556263/article/details/82768249

EventBus的初步学习及使用

常用的消息传递

  • 一个实现了监听器接口的类,必须把它自身注册到想要监听的类中去
  • 使用广播,内部实现都需要IPC,传递效率上来说不适合上层组件的通信
  • Activity间的消息传递通过 startActivityForResult 和 onActivityResult,会产生比较多逻辑判断。并且Intent及Bundle传值需要进行类型的检测,易发生错误

EventBus概述

EventBus是一款针对Android优化的 发布/订阅 事件总线,主要是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递信息。优点是开销小、代码更加优雅、将发送者与接收者解耦。

EventBus作为中间的平台对象,可以将各个模块、线程整合起来,在任意一个模块中订阅另一个模块。它接收消息的方法可以在UI线程接收,也可以在子线程接收。

EventBus具体流程

首先是通过发布者(Publisher)通过post方法发送事件(Event)。然后通过EventBus进行分发,发送给订阅该发布者的模块(Subscriber) ,订阅者收到消息后便会调用onEvent方法来做相应的处理。

EventBus的使用方法

订阅者的注册

首先,需要在接收消息的模块中,进行注册。通常在onCreate方法中进行注册。

注册有以下两个方法:

  • EventBus.getDefault().register(this);
  • EventBus.getDefault().register(this, methodName, Event.class);

而取消注册一般在onDestroy中执行,具体方法如下:

  • EventBus.getDefault().unregister(this);

发布者发布数据

发布者可以通过post方法发送数据:

  • EventBus.getDefault().post(new Event(msg));

订阅者处理数据

发布者可以通过post方法发送数据,发送后订阅者就可以在如下的方法中进行一些数据的处理:

  • onEvent:发布者发布数据的线程与接受者接收的线程是同一个。
  • onEventMainThread:接收的数据和发布者发布的数据不同,发布者在调用的线程发送数据,而接收者接收数据则是在UI线程中。因此非常常用,拿到数据后便可以进行UI操作。
  • onEventPostThread:与onEvent相似,发布的线程与接收的线程是在同一个线程。
  • onEventAsync:发布者发送在调用的线程,而接收者开辟了一个新的线程用于接收数据。
  • onEventBackgroundThread:发布者如果是在UI线程之外的线程发布消息,则接受者不开辟新的线程。如果发布者是在UI线程,则接收者开辟新的线程接收数据。

广告时间
我是N0tExpectErr0r,一名广东工业大学的大二学生
欢迎来到我的个人博客,所有文章均在个人博客中同步更新哦
http://blog.N0tExpectErr0r.cn

猜你喜欢

转载自blog.csdn.net/qq_21556263/article/details/82768249