Android(安卓)EventBus简单使用
16lz
2021-01-26
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使用了。
更多相关文章
- Android(安卓)N进入分屏代码分析二
- 解决ADT大量出现"Unexpected value from nativeGetEnabledTags:
- android通知栏:Service每分钟请求一次服务器
- 关于更新UI
- Android(安卓)---模拟手机发送短信
- Android(安卓)短信模块分析(二) MMS中四大组件核心功能详解
- android Handler & HandlerThread
- Android(安卓)蓝牙搜索,配对,连接发送数据
- Android(安卓)xmpp开发 asmack获取离线在线添加好友消息 及 好友