Eventbus3.0的基本使用以及在企业中如何EventBus

原创 2016年08月28日 15:20:53

什么是EventBus

EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,以及开发中经常遇到的A界面跳转到B界面,B界面跳转到C界面,C界面跳转到D界面,当D界面关闭时如何方便简单的让ABC着三个界面也关闭或者让当D界面关闭后BC界面关闭,A界面更新这些需求都可以通过EventBus实现。

基用法

添加依赖库:

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

compile 'org.greenrobot:eventbus:3.0.0'

注册

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

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //注册
    EventBus.getDefault().register(this);
}

订阅者

类似广播,但是有别于2.4版本,你不必再去约定OnEvent方法开头了(看不懂没关系):

//接收消息的内部方法
@Subscribe(threadMode =ThreadMode.MAIN)
public void helloEventBus(String message){
    tvMsg.setText(message);
}

该操作很简单,定义了一个hello方法,需要传入String参数,在其中操作UI操作,注意:
我们添加了注解@Subscribe,其含义为订阅者,在其内传入了threadMode,我们定义为ThreadMode.MainThread,其含义为该方法在UI线程完成。

发布者

既然你在某个地方订阅了内容,当然就会在某个地方发布消息,比如A跳转到B页面,当B页面的按钮发生点击事件的时候B页面关闭并且将消息传递回给A页面

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        EventBus.getDefault().post("传递EventBus的测试数据");
        finish();
    }
});

注解

新增的@Subscribe

其中ThreadMode提供了四个常量:

  • MainThread 主线程

  • BackgroundThread 后台线程

  • Async 后台线程

  • PostThread 发送线程(默认)

BackgroundThread:当事件是在UI线程发出,那么事件处理实际上是需要新建单独线程,如果是在后台线程发出,那么事件处理就在该线程。该事件处理方法应该是快速的,避免阻塞后台线程。

Async:发送事件方不需要等待事件处理完毕。这种方式适用于该事件处理方法需要较长时间,例如网络请求。

sticky = true

默认情况下,其为false。什么情况下使用sticky呢?

EventBus.getDefault().postSticky(new VoteEvent(obj));
EventBus.getDefault().register(this);
@Subscribe(sticky = true)


什么时候使用sticy,当你希望你的事件不被马上处理的时候,举个栗子,比如说,在一个详情页点赞之后,产生一个VoteEvent,VoteEvent并不立即被消费,而是等用户退出详情页回到商品列表之后,接收到该事件,然后刷新Adapter等。其实这就是之前我们用startActivityForResult和onActivityResult做的事情。

priority = 1

相信大部分人知道该用法,值越小优先级越低,默认为0。

在企业级开发中如何使用Eventbus

EventBus在企业开发中还是用得比较多的,但是相信很多人会问在企业开发中的使用会是上述的那么简单的使用吗,回答肯定是否定的,在企业开发中使用eventbus往往都要创建一个事件类,把你的每一个参数(或者可能发生冲突的参数),封装成一个类,以我们公司为例,提供一个企业开发的eventbus的使用模板:

创建模板

public class EfunEvent {    public String eventMsg;    public int event;    public Object eventData;    public EfunEvent(String eventMsg, int event, Object eventData) {        this.eventMsg = eventMsg;        this.event = event;        this.eventData = eventData;    }    public EfunEvent() {    }}
eventMsg:传递简单的数据类型
event:通过这个值判断哪个类接收数据
eventData:复杂数据类型,对象,map等等

发送数据

EfunEvent event = new EfunEvent();
event.event = 993
EventBus.getDefault().post(event);

接收数据

public static final int CART_EVENT_SETPRICE = 933;
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMainEventBus(EfunEvent event) {
    switch (event.event) {
        case CART_EVENT_SETPRICE:
            finish();
            break;
        default:
            break;
    }
}

以上方案为一般企业开发使用的eventbus的模板方案,希望对各位读者有用!





关于地产信息化“大佬”们说了什么?看完这些就够了

6月16-18日,主题为“迎战数字时代,重塑IT价值”的帆软-2016中国百强地产CIO高峰论坛隆重召开。作为一个标杆企业齐聚的大会,会议亮点自然是层出不穷,出席的新城、绿城、红星、景瑞、众安等知名地...
  • hualalalalali
  • hualalalalali
  • 2016年06月28日 10:58
  • 726

HC/LS/HCT/F系列芯片的区别(转)

1、 LS是低功耗肖特基,HC是高速COMS。LS的速度比HC略快。HCT输入输出与LS兼容,但是功耗低;F是高速肖特基电路; 2、 LS是TTL电平,HC是COMS电平。 3、 LS输入开路为高...
  • fengmm521
  • fengmm521
  • 2017年11月03日 18:44
  • 54

秋招来袭

秋招来袭
  • qq_25184739
  • qq_25184739
  • 2017年08月31日 21:30
  • 203

【华为日记】中秋不加班,感觉不自在

3月份到现在的项目组,
  • wang4514
  • wang4514
  • 2014年09月07日 15:31
  • 302

LynQ使用说明

一、lynq使用说明 手机端安装 CollectorService.apk。使用eclipse默认签名对被测应用apk重签名,并安装到手机端。【如果被测app已经以源码形式关联到测试工程中,可省略此...
  • u014744118
  • u014744118
  • 2016年05月20日 09:48
  • 530

solidthinking那么傻瓜的软件,能替代hypermesh这些比较复杂的传统cae软件么?

作者:村儿 链接:http://www.zhihu.com/question/23187050/answer/48984113 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转...
  • pingmin2014
  • pingmin2014
  • 2016年06月06日 14:11
  • 1599

Box创始人:原以为Google Wave会是互联网未来

[导读]电子邮件不会消亡,这是一个开放的标准,适用于每一个地方,每一个人。 Box联合创始人兼CEO阿伦·列维(腾讯科技配图) 腾讯科技讯(小贝)北京时间9...
  • liuxuejin
  • liuxuejin
  • 2012年09月26日 14:36
  • 984

一个三流学校程序员的奋斗史

文章是转载的,我不是一个毅力很强的人,总得一些激励人的文章来激励自己我也在一个三流的学校,在找有关考研的文章的时候看到这篇文章觉得不错,不敢独享,拿出来共勉……看完后我又一次明白,勤能补拙,一个人的成...
  • a136447572
  • a136447572
  • 2016年12月19日 12:10
  • 255

OBD芯片应用开发手册 OBD2开发 内部资料分享 汽车电子通讯开发TDA61 TDA66芯片

OBD产品及各种汽车电子相关的开发。往往需要开发者学习各种汽车协议,深入了解全部OBD规范和汽车各性能参数。这往往需要开发者很长的时间学习研究,大大延缓了OBD产品的上市开发进度。为此深圳芯方案电子公...
  • CPJ_phone
  • CPJ_phone
  • 2014年09月05日 10:13
  • 2040

国内有哪些知名公司在使用Golang语言?

统计在使用Golang的公司 和 使用效果  如果你的公司正在使用golang 欢迎回复告诉情况,和大家分享~~ 已知的如下: 360消息推送的数据: 16台机器,标配:24个硬件线程,64...
  • codemanship
  • codemanship
  • 2014年09月18日 13:18
  • 3466
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Eventbus3.0的基本使用以及在企业中如何EventBus
举报原因:
原因补充:

(最多只允许输入30个字)