EventBus是Android的一个开源项目,它最重要的功能就是可以简化各个组件之间的消息传递,类似于Android自身的广播。但又比广播使用起来方便的多的多。
github地址:https://github.com/greenrobot/EventBus
官方文档:http://greenrobot.org/eventbus/documentation
1.在Android studio中
在build.gradle中添加
compile 'de.greenrobot:eventbus:2.4.0'
或在eclipse中
导入EventBus的jar包,直接将jar拷到工程目录的libs文件夹下即可。
2.定义一个MessageEvent类
这个类是一个普通的Object,没有任何特殊,我们用它作为消息传递的载体。
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
3.注册EventBus。
在要接收消息的Activity或Fragmen或Service中注册EventBus。
我们可以在onCreate中进行注册,下面在Activity中的onCreat中进行注册,方法如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//进行EventBus的注册
EventBus.getDefault().register(this);
}
4.发送消息。
发送消息是在要发送消息的Activity或Fragmen或Service中使用EventBus中的Post方法来实现发送的,发送过去的是我们新建的类的实例!
EventBus.getDefault().post(new MessageEvent("发送消息"));
5.接收消息。
在要接收消息的Activity或Fragmen或Service中复写框架中的前缀为onEvent方法,此方法有四种,按需求复写即可。一般情况下只需定义下面的第一种即可。
(1)我们只用定义这个方法就好,它并不是一个接口什么的,也不需要其他任何操作。这个方法执行在哪个线程是由post方法的那个线程决定的,它执行在哪个线程onEvent就执行在哪个线程,方法如下:
public void onEvent(MessageEvent event){
Toast.makeText(getActivity(),event.message,
Toast.LENGTH_SHORT).show();
}
(2)如果我们现在想收到消息的时候将它保存起来,那么我们可以直接定义如下的一个方法:
public void onEventBackgroundThread(MessageEvent event){
saveToDisk(event.message);
}
(3)下面这个方法会执行在主线程之外的某个子线程,如果post方法本身就是子线程,那么就与post方法执行在同一线程,需要注意的是,当多个post时,它不会主动新开线程,只会按顺序挨个执行,因此可以保证我们消息都按顺序保存了的。那如果我们想每次收到消息都新开一个线程来执行呢?只需定义如下的方法就好:
public void onEventAsync(MessageEvent event){
backend.send(event.message);
}
(4)下面这个方法执行在于post及主线程都不相同的线程内。每次post都会新开一个线程。使用该方法时应考虑该方法触发的次数,千万别让线程过多,导致资源消耗过大。最后,最常用的,假如我们想在接受消息的时候更新UI,因为UI只能在主线程进行更新,因此我们希望接收到消息的方法执行在主线程,那么,我们可以直接定义一个如下的方法。
public void onEventMainThread(MessageEvent event) {
textField.setText(event.message);
}
6.注销EventBus。
在要接收消息的Activity或Fragmen或Service中进行注销,重写onDestroy( )方法
@Override
protected void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}
————————————————
转载于:https://blog.csdn.net/a373595475/article/details/78369817