EventBus的初步使用

来源:互联网 发布:type3软件下载 编辑:程序博客网 时间:2024/05/22 13:23

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

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的几个函数,以及各个函数之间的关系。

0 0
原创粉丝点击