版权声明:欢迎来到我的个人博客: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