EventBus的初步使用

今天就关于关系事件的消息传递中的问题写这篇文章,首先我们先来了解一下几种事件传递的方式。

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西(触摸事件,web接口调用返回的数据。。。)

我经常看到EventBus被作为一种通用模式应用在Android开发中。Otto和EventBus这样的类库经常被用来省去编写不同层之间来封装代码的模板类。尽管EventBus刚开始看起来的确带来了方便,但是很快这些纠缠的事件会被弄成一堆乱麻,很难跟踪更别说调试。EventBus通常被宣扬可以降低模块之间的耦合度,但是,事实上带给你的是降低耦合度带来的混乱和困惑。RxJava要比EventBus的应用更广泛,EventBus仅仅是作为一种消息的传递工具,但是RxJava里面几乎可以做任何事情。但有一个严重的问题就是上手非常的不容易。所以今天这篇文章也是为了简单介绍这两者的区别,先学习更容易上手的EventBus,之后如果有时间的话可以专心研究RxJava和RxAndroid的搭配使用。

第一步、
1、下载EventBus的类库
源码:https://github.com/greenrobot/EventBus

2、创建一个自定义的类,并且构造时传进去一个字符串,然后可以通过getMsg()获取出来。

public class HeadImgEvent {
    private String mMsg;

    public HeadImgEvent(String msg) {
        mMsg = msg;
    }

    public String getMsg() {
        return mMsg;
    }
}

3、在要接收消息的页面注册和解除注册

 @Override
    public void initViews() {
        //        注册EventBus
        EventBus.getDefault().register(this);
    }
 @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

4、在需要发消息的地方写发送消息的代码
//eventBus.post(new AnyEventType event);
EventBus.getDefault().post(new HeadImgEvent(“新消息”));

5,在需要接受消息的地方重新接受方法
接收消息时,我们使用EventBus中最常用的onEventMainThread()函数来接收消息,具体为什么用这个,我们下次再讲,这里先给大家一个初步认识,要先能把EventBus用起来先。

 @Subscribe(threadMode = ThreadMode.MAIN)
 public void onEvent(HeadImgEvent event) {
 Toast.makeText(this, event.getMsg()+"",Toast.LENGTH_SHORT).show();
 }

在以上代码中我们重写了@Subscribe(threadMode = ThreadMode.MAIN)。这里说名字该消息是在主线程中接受的,所以可以做更新UI的操作,在这里接受消息时需要注意的问题就是这个。当然了,根据EventBus类库版本的不同可能它的写法也会不同吗,所以在这里需要特别注意。如果到了这里你的EventBus还没用起来的话那就需要好好检查一下了,是不是很简单。改天我们再说一下EventBus的几个函数,以及各个函数之间的关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值