Eventbus使用教程
摘要
eventbus官方api文档
eventbus下载地址
1、Eventbus配置
2、Eventbus源码解析(#Eventbus源码解析)
3、Eventbus使用教程
Eventbus配置
在gradle文件的dependencies {}模块中添加依赖
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation group: 'org.greenrobot', name: 'eventbus', version: '3.1.1'
}
Eventbus使用教程
1、自定义事件类(实质上是一个java bean类,用来定义传输的数据的类型)
public class MyEvent {
String message;
public MyEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2、在subject具体实现类里注册、注销事件
以在activity中为例,当我们需要在Activity或者Fragment里订阅事件时,我们需要注册EventBus。我们一般选择在Activity的onCreate()方法里去注册EventBus,在onDestory()方法里,去解除注册。
注册事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.testBtn);
button.setOnClickListener(this);
tv = (TextView)findViewById(R.id.txt);
//注册observer
EventBus.getDefault().register(this);
}
注销事件
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
3、发送事件
可放在任意需要的位置,此处以点击button后触发事件发送为例
@Override
public void onClick(View v) {
EventBus.getDefault().post(new MyEvent("nice to meet you"));
}
4、事件处理
用@Subscribe注解的方法即为事件处理者,处理消息的方法名无限制,但是需要指定线程模型。
线程模型
- ThreadMode.MAIN Event handler methods are called in a separate thread.
- ThreadMode.ASYNC
- ThreadMode.BACKGROUND
- ThreadMode.MAIN_ORDERED
- ThreadMode.POSTING
@Subscribe(threadMode = ThreadMode.MAIN)
public void subscribeMyEvent(MyEvent event){
tv.setText(event.getMessage());
}
Eventbus源码解析
Eventbus使用了观察者模式
返回顶部点击跳转