一、发送普通消息
第一步:
添加依赖:implementation 'org.greenrobot:eventbus:3.1.1'
第二步:
注册监听: EventBus.getDefault().register(this);
第三步:
反注册监听:EventBus.getDefault().register(this);
第四步:
构造发送消息类,并发送消息
第五步:
接收消息(四种)
第一种:主线程处理: ThreadMode.MAIN
首先去判断当前如果是UI线程,则直接调用;否则: mainThreadPoster.enqueue(subscription, event);把当前的方法加入到队列,然后直接通过handler去发送一个消息,在handler的handleMessage中,去执行我们的方法。说白了就是通过Handler去发送消息,然后执行的。
第二种:后台处理,也就是子线程处理,不可并发ThreadMode.BACKGROUND
如果当前非UI线程,则直接调用;如果是UI线程,则将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用
executorService = Executors.newCachedThreadPool();。
第三种:后台处理,可以并发执行, ThreadMode.ASYNC
将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用;线程池与BackgroundThread用的是同一个。
第四种:发送和接收在同一个线程中处理。ThreadMode.POSTING
对应表示该方法和消息发送发是在同一个线程中执行。
对应的代码:EventActivity跳转到SendMessageActivity页面, SendMessageActivity往EventActivity页面发送消息
EventActivity
onCreate的方法里 进行注册
EventBus.getDefault().register(EventActivity.this);
onDestroy的方法里 进行反注册
EventBus.getDefault().unregister(EventActivity.this);
创建发送消息的类
public class MyMessage {
private Stringmessage;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
EventActivity 中接收消息
//事件处理:方法名自定义,参数必须为当前消息的类型
//threadMode有四种类型(MAIN、POSTING、BACKGROUND、AYSNC)
@Subscribe(threadMode = ThreadMode.MAIN)
public void eventBusMessage(MyMessage myMessage){
text.setText(myMessage.getMessage());
}
SendMessageActivity发送消息
MyMessage myMessage =new MyMessage();
myMessage.setMessage("EventBus发送的消息");
EventBus.getDefault().post(myMessage);
finish();
二、发送粘性消息
第一步:
添加依赖:implementation 'org.greenrobot:eventbus:3.1.1'
第二步:
构造发送消息类
第三步:
发布消息
第四步:
接收消息
第五步:
注册监听: EventBus.getDefault().register(this);
解注册监听:EventBus.getDefault().unregister(this);
对应的代码:EventStickyActivity跳转到MessageActivity页面, EventStickyActivity往MessageActivity页面发送消息
EventStickyActivity页面:
跳转时发送消息
MyMessage myMessage =new MyMessage();
myMessage.setMessage("我是粘性事件");
EventBus.getDefault().postSticky(myMessage);
startActivity(new Intent(EventStickyActivity.this, SendMessageActivity.class));
MessageActivity页面:
@Subscribe(threadMode = ThreadMode.MAIN,sticky =true)
public void eventStickyMessage(MyMessage myMessage){
text.setText(myMessage.getMessage());
}
点击按钮,进行注册:
//为防止多次注册,需要添加变量进行控制
private boolean isFrist =true;
if (isFrist) {
isFrist =false;
EventBus.getDefault().register(SendMessageActivity.this);
}
//反注册
@Override
protected void onDestroy() {
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(this);
super.onDestroy();
}
网友评论