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使用了。

更多相关文章

  1. Android(安卓)N进入分屏代码分析二
  2. 解决ADT大量出现"Unexpected value from nativeGetEnabledTags:
  3. android通知栏:Service每分钟请求一次服务器
  4. 关于更新UI
  5. Android(安卓)---模拟手机发送短信
  6. Android(安卓)短信模块分析(二) MMS中四大组件核心功能详解
  7. android Handler & HandlerThread
  8. Android(安卓)蓝牙搜索,配对,连接发送数据
  9. Android(安卓)xmpp开发 asmack获取离线在线添加好友消息 及 好友

随机推荐

  1. android百度地图:ItemizedOverlay
  2. Android(安卓)RecyclerView多个Item布局
  3. android 调试 报错
  4. 在Tab里面使用Android(安卓)TTS引擎的问
  5. Android(安卓)网页无法打开 net:ERR_UNKN
  6. android屏幕旋转在framework中的修改。
  7. Android当前时间的获取
  8. android 开发环境搭建
  9. application全局变量
  10. Android的animation