什么是EventBus

EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

添加依赖库:

首先你要为你的app添加依赖库:

compile 'de.greenrobot:eventbus:3.0.0-beta1'

注册

举个例子,你需要在一个activity中注册eventbus事件,然后定义接收方法,这和Android的广播机制很像,你需要首先注册广播,然后需要编写内部类,实现接收广播,然后操作UI,在EventBus中,你同样需要这么做。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); EventBus.getDefault().register(this); }
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}

订阅者

类似广播,但是有别于2.4版本,你不必再去约定OnEvent方法开头了

@Subscribe(threadMode = ThreadMode.MainThread)
public void helloEventBus(String message){
mText.setText(message);
}

该操作很简单,定义了一个hello方法,需要传入String参数,在其中操作UI操作,注意:

我们添加了注解@Subscribe,其含义为订阅者,在其内传入了threadMode,我们定义为ThreadMode.MainThread,其含义为该方法在UI线程完成,这样你就不要担心抛出异常啦。是不是很简单?

发布者

既然你在某个地方订阅了内容,当然就会在某个地方发布消息。举个例子,你的这个activity需要http请求,而http请求你肯定是在异步线程中操作,其返回结果后,你可以这么写:

String json="";
EventBus.getDefault().post(json);

原理初探

你订阅了内容,所以你需要在该类注册EventBus,而你订阅的方法需要传入String,即你的接收信息为String类型,那么在post的时候,你post出去的也应该是String类型,其才会接收到消息。

如果你post的是对象

首先你需要定义一个类似pojo类:

public class MessageEvent {
public final String name;
public final String password;
public MessageEvent(String name,String password) {
this.name = name;
this.password=password;
}
}

然后你post的时候:

EventBus.getDefault().post(new MessageEvent("hello","world"));

当然,你接收的方法也需要改为:

@Subscribe(threadMode = ThreadMode.MainThread)
public void helloEventBus(MessageEvent message){
mText.setText(message.name);
}

最新文章

  1. ES6+ 现在就用系列(一):为什么使用ES6+
  2. Java学习笔记1
  3. 从零自学Hadoop(08):第一个MapReduce
  4. 510C
  5. C#生成JSON数据
  6. c++ 操作符 重载。
  7. EF调用存储过程遇到的问题
  8. CocoaLumberjack+XcodeColor(输出带有颜色的日志)在安装过程中遇到的问题
  9. ubuntu下编译安装PHP
  10. Maven学习:Eclipse使用maven构建web项目(转)
  11. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第5章 树搜索策略
  12. C# async await 例子
  13. C# - MemoryStream
  14. CSS中常见的BUG调试
  15. qt的资源替换搜索QDir具体解释
  16. SQL 把表中字段存储的逗号隔开内容转换成列表形式
  17. webstrom使用手册
  18. MySQL表空间集
  19. 快速获取表单多条数据,使用ajax传递给后台
  20. 尚硅谷springboot学习34-整合SpringData JPA

热门文章

  1. draftsight的热补丁
  2. 解决搜狗高速模式及设置页面打不开的问题DisableFeature.reg
  3. 固态硬盘使用简要手册——windows平台
  4. consul之:ACL配置使用
  5. Java-Runoob-高级教程-实例-数组:13. Java 实例 – 数组交集
  6. 使用SHOW binlog events查看binlog内容
  7. rnn实现三位数加法的训练
  8. redis作为mysql的缓存服务器(读写分离)
  9. 必须熟练掌握的150个Linux命令
  10. sas 获取字符串长度实例