EventBus的使用

Android APP当中可以用于传递消息的有广播、Intent、Handle等,使用EventBus可以取代它们的一些功能,而且使得代码非常的简明优雅。

导入EventBus的包之后,便可以使用了,使用方法如下

发送消息

Object obj = new Object()
EventBus.getDefault().post(obj);

接收消息的类需要先注册,当类销毁时,要进行注销。一般接收消息都是Activity类,所以都在onCreate函数当中进行注册,在Ondestroy函数当中注销

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EventBus.getDefault().register(this);
}


@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}
接收有四个函数可供选择,他们的差异如下所示
    //发布事件和接受事件在同一个线程,避免做复杂耗时的操作
    public void onEvent(Object obj){
        System.out.println("do something");
    }

    //接收事件在UI线程当中执行,可以修改UI界面
    public void onEventMainThread(Object obj){
        System.out.println("do something");
    }

    //如果发送事件从UI事件当中发出,则接收事件在子线程当中执行
    //如果发送事件本身就是从子线程当中发出,则接收事件和发送事件在同一线程当中
    public void onEventBackground(Object obj){
        System.out.println("do something");
    }

    //新建子线程接收
    public void onEventAsync(Object obj){
        System.out.println("do something");
    }
EventBus是根据参数进行识别发送的,比如post(A a),那么接收的时候会判断参数是否是类A,如果是才会发送到这个接收函数。
 
EventBus是典型的观察者模式,EventBus是消息发送者,而其他注册的类属于消息订阅者。其内部会根据订阅者的接收类型进行分发。
 
EventBus源码地址:https://github.com/greenrobot/EventBus
 
 
 
posted @ 2016-09-13 19:50  黄大仙爱编程  阅读(161)  评论(0编辑  收藏  举报