前言
本来通知这周一复工的,结果好像事情并没有简单,又推迟到下周1了,还要在家办公一段时间,昨天有粉丝问我怎么没有更文,昨天分批次去公司开了一下午的会议,索性大家人数分批开会都带了口罩,所以一点都不慌,大家出门都记得戴口罩,勤洗手~(在家办公还是蛮快乐的,可以边唱歌边办公_)
前几天更新了OKHTTP
和Retrofit
的解析,今天更最后一篇EventBus
的解析。
把最近的知识也整理汇总了一份,打算和之前的知识做个汇总的PDF,有兴趣的可以借鉴学习一下
上图知识汇总的PDF相关内容后续GitHub更新,想冲击金三银四的小伙伴可以找找看看,欢迎star
(顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找)
https://github.com/xiangjiana/Android-MS
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取
一、EventBus简介
EventBus
是一个Android端优化的publish/subscribe
消息总线,简化了应用程序内 各组件间、组件与后台线程间的通信。
作为一个消息总线主要有三个组成部分:
事件(Event): 可以是任意类型的对象。通过事件的发布者将事件进行传递。
事件订阅者(Subscriber): 接收特定的事件。
事件发布者(Publisher): 用于通知 Subscriber 有事件发生。可以在任意线程任 意位置发送事件。
上图解释了整个EventBus
的大概工作流程:事件的发布者(Publisher)将事件 (Event)通过post()
方法发送。EventBus
内部进行处理,找到订阅了该事件 (Event)的事件订阅者(Subscriber
)。然后该事件的订阅者(Subscriber
)通过 onEvent()
方法接收事件进行相关处理(关于onEvent()
在EventBus 3.0
中有改动, 下面详细说明)。
二、EventBus
的简单使用
1、把EventBus
依赖到项目
build.gradle
添加引用
compile 'de.greenrobot:eventbus:3.0.0-beta1'
2、构造事件(Event)对象。也就是发送消息类 每一个消息类,对应一种事件。这 里我们定义两个消息发送类。后面讲解具体作用。
public class NewsEvent {
private String message;
public NewsEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
public class ToastEvent {
private String content;
public ToastEvent(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
3、注册/解除事件订阅(Subscriber)
EventBus.getDefault().register(this);//注册事件 其中this代表订阅者
具体注册了对什么事件的订阅,这个需要onEvent()
方法来说明。在EventBus 3.0
之 前,onEvent()
方法是用来接收指定事件(Event)类型对象,然后进行相关处理操 作。在EventBus 3.0
之后,onEvent()
方法可以自定义方法名,不过要加入注解 @Subscribe
。
@Subscribe
public void onToastEvent(ToastEvent event){
Toast.makeText(MainActivity.this,event.getContent(),Toas t.LENGTH_SHORT).show();
}
通过register(this)
来表示该订阅者进行了订阅,通过onToastEvent(ToastEvent event)
表示指定对事件ToastEvent
的订阅。到这里订阅就完成了。
需要注意的是: 一般在onCreate()
方法中进行注册订阅。在onDestory()
方法中进行 解除订阅。
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
4 、发送消息 订阅已经完成,那么便可以发送订阅了。
EventBus.getDefaul