EventBus已经发展到第三版了,对于它的使用和原理相对于之前也有了很大的改进。下面就介绍一下EventBus2和EventBus3的使用和原理
说明:方法上面的参数设置
threadMode:线程工作状态,表示方法在哪个线程执行
ThreadMode.POSTING
:默认的设置,表示发送消息在哪个线程,就在哪个线程执行方法
ThreadMode.MAIN
:主线程执行该方法
ThreadMode.MAIN_ORDERED
:也是在主线程执行,只是不会阻塞主线程
ThreadMode.BACKGROUND
:后台线程执行
ThreadMode.ASYNC
:异步子线程
sticky:是否是粘性操作,表示如果方法在后面注册的话,也是可以收到消息的
priority:优先级,同一个消息,优先级高的优先收到消息
1、使用
1.1 EventBus2
1.1.1 EventBus2的配置
在app的build.gradle中进行配置
implementation 'org.greenrobot:eventbus:3.1.1'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
1.1.2 EventBus2的使用
注册:
需要在类中注册当前的对象,对象销毁的时候取消注册
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);//注册
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);//取消注册
}
//定义事件
@Subscribe(threadMode = ThreadMode.BACKGROUND,priority = 4)
public void onEvent(int click){
Log.e("MainActivity","onEvent"+click);
}
}
发送事件:
EventBus.getDefault().post(3);
EventBus.getDefault().postSticky(new Eventtype(3));//发送粘性事件
发送完事件之后就可以在Logcat中发现方法onEvent中打印的Log了。
1.2 EventBus3
1.2.1 EventBus3的配置
(1)导包
implementation 'org.greenrobot:eventbus:3.1.1'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
(2)配置索引文件属性,在build.gradle中进行配置
defaultConfig {
javaCompileOptions{
annotationProcessorOptions{
includeCompileClasspath = true
arguments = [
"eventBusIndex": "com.example.viewtest.EventBusIndex"]
}
}
}
(3)定义方法
在类中定义方法
@Subscribe(threadMode = ThreadMode.BACKGROUND,priority = 4)
public void onEvent(int click){
Log.e("MainActivity","onEvent"+click);
}
(4)编译
调用app的make project,就会生成对应的索引文件
(5)在application中进行注册
EventBus.builder().addIndex(new EventBusIndex()).installDefaultEventBus();
1.2.2 EventBus3的使用
基本操作都是一样的,也是需要注册和注销注册,发送事件
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
findViewById(R.id.tv_click).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post(new Eventtype(3));//发送消息
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();