EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
1、进入Git EventBus的地址 :https://github.com/greenrobot/EventBus 找到依赖
Via Gradle:
compile 'org.greenrobot:eventbus:3.0.0'
//将这个依赖添加进Module
2.基本使用
(1)自定义一个类,可以是空类,比如:
public class AnyEventType {
public AnyEventType(){}
}
(2)在要接收消息的页面注册:
eventBus.register(this);
(3)发送消息
eventBus.post(new AnyEventType event);
(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(AnyEventType event) {}
(5)解除注册
eventBus.unregister(this);
//代码不多,下面进入实战;
3.项目运用
(1)我们先创建一个类存储数据。
public class AnyEventTypeTest {
private String mMsg;
public AnyEventTypeTest(String msg) {
// TODO Auto-generated constructor stub
//我要发送和接收的是字符串,所以我这里就是定义的String
mMsg = msg;
}
public String getMsg(){
return mMsg;
}
}
(2)我在需要接收的页面注册一下,我这里是在MainActivit里面接收的,所以在这里注册。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
// Intent intent = new Intent(MainActivity.this,SocketServer.class);
// startService(intent);
//注册Event bus
EventBus.getDefault().register(this);
}
(3)在发送的页面发送消息,我这里是从Socket接收的数据,在Server里面把消息发送过去。
public void sendMasg(){
ServerSocket serverSocket = new ServerSocket(PROT);
Socket accept = serverSocket.accept();
InputStream in = accept.getInputStream();
//socket通讯中如果有客户端发送数据过来,就赋值给msg,然后通过EventBus发送
String msg = readCMDFromSocket(in);
//这里用这个方法把数据发送。
EventBus.getDefault().post(new AnyEventTypeTest(msg));
}
(4)接收消息,我是MainActivit里面绑定的,所以我在这里接收。
//这个接收消息的方法是手打的,可以直接复制我的这段话。
@Subscribe(threadMode = ThreadMode.MAIN)//←这里有点问题,EventBus3.0要添加一个这个,不然报错。
public void onEventMainThread(AnyEventTypeTest event) {
//event.getMsg就是获得消息。
String msg = "收到了消息:" + event.getMsg();
//把获取到的字符串Toast出来
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
(5)解除注册,我直接在onDestroy()解除注册。
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
这个就是简单的EventBus使用了。