您的位置:首页 > 其它

EventBus的简单使用

2015-05-25 17:40 330 查看
上周在花果山的修改用户资料界面请求修改资料然后返回个人主页的时候要改变个人主页的内容,我首先想到的是startActivityForResult方法和onActivityResult方法,而且Leo的辅助类里也有一个方法封装了startActivityForResult方法,但事实上我在其他页面中并没有看到有人调用它,而发现的是event这个目录,里面基本都是一些空类,上网查了才知道是使用了EventBus这个第三方类库。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。那么我们就来看看怎么用EventBus吧。

使用EventBus十分简单,一共三步:

一.自定义一个类,可以只有构造方法。(比如下面这个用户资料改变Event)

public class UserProfileChangedEvent {
        public UserProfileChangedEvent() {
        }
    }


二.在要发送消息的地方调用EventBus的post方法,并将该类的对象作为参数。

EventBus.getDefault().post(new UserProfileChangedEvent());


三.在要接收消息的地方(以下用Activity作为例子)

1.注册EventBus,在Activity的onCreate方法中注册

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
    }
2.实现onEvent方法,在此进行接收到消息之后的操作

public void onEvent(UserProfileChangedEvent event) {
        updateProfileView();//更新用户资料
    }
参数中要指明是接收哪种消息,EventBus便可分辨,因此我们可以多写几个onEvent方法分别接收不同的消息,比如以下接收另一个CityChangedEvent

public void onEvent(CityChangedEvent event) {
        updateCityView// 城市改变,数据变化
    }


3.解除注册EventBus,在onDestroy方法中解除

@Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }


EventBus使用就这么简单。发送者和接收者解耦使得代码相当清晰。

刚学了点东西就迫不及待的想用,于是在写翔翔财富的时候,一个明明可以在现成的回调函数中实现的功能我居然也去写了一个Event,被Leo指出后才恍然大悟......所以说不要学了一点东西就沾沾自喜,打代码要踏实,不要滥用知识,要多想想有没有必要,不要去做一些无用功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: