EventBus简介
EventBus是一个Android和Java的开源库,使用发布者/订阅者模式进行松散耦合。EventBus只需几行代码即可实现与分离类的集中通信 - 简化代码,消除依赖关系,并加速应用程序开发。官方地址是http://greenrobot.org/eventbus/。
使用EventBus的好处
- 简化了组件之间的通信;
- 将事件发送者和接收者分离;
- 适用于UI工件(例如,活动,片段)和后台线程;
- 避免复杂且容易出错的依赖关系和生命周期问题;
- 很快,专门针对高性能进行了优化;
- 体积很小;
开始使用
1、首先添加依赖
implementation 'org.greenrobot:eventbus:3.1.1'
2、准备订阅者
在自己需要用到的Activity或者Fragment等地方中,在onCreate()方法中注册订阅者,然后在onDestory()中解注册订阅者
注册:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
解注册:
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
构造消息发送类:
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
3、发布活动
在另一个Activity(或其他Fragment等)中,需要发送的消息添加以下代码即可:
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
4、接收消息
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onEvent(StickyEvent event){
tv_c_result.setText(event.msg);
}
粘性事件
某些事件包含事件发布后感兴趣的信息。例如,事件表示某些初始化已完成。或者,如果您有一些传感器或位置数据,并且您希望保留最新值。您可以使用粘性事件,而不是实现自己的缓存。所以EventBus将某种类型的最后一个粘性事件保存在内存中。然后,粘性事件可以传递给订阅者或明确查询。因此,您不需要任何特殊逻辑来考虑已有的数据。
发布消息:
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
接收消息:
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {
textField.setText(event.message);
}
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27135121/article/details/97886088