事件总线框架EventBus和Otto学习笔记

功能说明:模块间的高效通信并解耦。

一:EventBus

GitHub地址与使用方法:https://github.com/greenrobot/EventBus
使用基本步骤(Android Studio为例)
1.build.gradle里面添加依赖

dependencies {
    compile 'org.greenrobot:eventbus:3.0.0'
}

2.注册与注销

EventBus.getDefault().register(this);

EventBus.getDefault().unregister(this);

3.定义接收消息的方法

    /**
     * 1.需要使用注解@Subscribe,如果没有使用注解,会报错
     * 2.与方法名无关
     * 3.参数自己设置,可以是自定义的JavaBean
     * @param
     */
    @Subscribe
    public void onEventaaa(Object object) {
        if (object instanceof EventData) {
            Log.i(TAG, "EventBusMainActivity onEventaaa:" + ((EventData)object).getContent());
        }

    }

    @Subscribe
    public void onEventbbb(EventData eventData) {
        Log.i(TAG, "EventBusMainActivity onEventbbb:" + eventData.getContent());
    }

4.发送消息

/**
 * 参数自己定义,如果接收方法的类型与post的参数类型不一致,是不会接收到消息的
 */
EventBus.getDefault().post(eventData); 

一:OTTO

Otto GitHub地址
使用基本步骤(Android Studio为例)
1.build.gradle里面添加依赖

dependencies {
    compile 'com.squareup:otto:+'
}

2.实例化Bus,可以使用一个单例。

public class BusProvider {

    private volatile static Bus bus = null;   //使用volatile来修饰多线程访问变量的情况

    private BusProvider(){
    }
    public static Bus getInstance(){
        if(bus == null){
            synchronized (BusProvider.class) {  //加上sunchronized来防止并发
                if (bus == null) {
                    bus=new Bus();
                }
            }
        }
        return bus;
    }
}

3.注册与注销

BusProvider.getInstance().register(this);   //注册事件

BusProvider.getInstance().unregister(this); //取消订阅

4.定义接收消息的方法
和EventBus用法类似

    @Subscribe
    public void subscribeEvent(EventData data){
        Log.i(TAG, "OTTOMainActivity subscribeEvent:" + data.getContent());
    }

5.发送消息
和EventBus用法类似
但是多了一个注解@Produce

    public void sendMsg() {
        EventData eventData = new EventData();
        eventData.setContent("test msg");
        BusProvider.getInstance().post(eventData);
    }

    /**
     * 必须要有返回值,当其他地方注册的时候,会立马回调该方法
     * @return
     */
    @Produce
    public EventData providerEvent(){
        String content = "hello world from OTTOMainActivity";
        EventData eventData = new EventData();
        eventData.setContent(content);
        return eventData;
    }

总结:
EventBus和Otto较为类似,相对于BroadcaseReceiver,用法更加简单,效率高而且资源消耗低。但是也不能完全替代BroadcaseReceiver的功能,BroadcaseReceiver还具备多个APP间通讯的功能,所以怎样选择还是视情况而定。


参考:
Android学习系列(43)–使用事件总线框架EventBus和Otto

demo地址:
GitHub:https://github.com/gaoshiqi/EventTest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值