Android 事件总线Otto使用入门一

Otto是android 事件总线 EventBus模式的一个框架

在Module的build.gradle中添加如下语句:

// Event bus.
compile 'com.squareup:otto:1.3.5'
我们可以写一个App类继承Application使得Bus实例在程序运行初始就得到初始化,也可以单独写一个BusProvider的类在需要的时候直接使用其中已经初始化的Bus对象。在这里我使用App类:

public class App extends Application {
    public static Bus bus;
    @Override
    public void onCreate() {
        super.onCreate();
        // Bus must be created before we do anything else as other components want to post on it.
        bus = new Bus(ThreadEnforcer.ANY);
    }
}
然后我们可以在MainActivity的onResume方法中注册并在onPause方法中取消注册(注销)语句如下:

@Override
protected void onResume() {
    super.onResume();
    App.bus.register(this);
}
@Override
protected void onPause() {
    super.onPause();
    App.bus.unregister(this);
}
然后到了最关键的地方,也就是这个框架的核心功能。我们需要产生一个事件,一个或多个订阅者,还需要一个发布函数(post方法可以直接使用):

首先我们写一个事件类并在MainActivity中写一个产生事件的函数并且通过点击按钮的事件发布出去(如果你直接将post事件写在MainActivity的onCreate方法中,那么你不可能将事件发布出去,尽管不会报错,因为onCreate()方法在onResume()方法之前):

public class NewEvent {
    public String message;
    public NewEvent(String message) {
        this.message = message;
    }
}
public NewEvent produceNewEvent() {
    return new NewEvent("this is changed String");
}

App.bus.post(produceNewEvent());

我为什么没有在produceNewEvent方法上加@produce注解呢?因为加上之后即使不点击按钮事件也会在程序运行时自己发布出去。

为了方便起见我们就不再新建一个类,而直接把订阅者写在MainActivity中(因为其原理是找寻具有@Subscribe注解的函数去执行,和类本身没有关系):

//订阅者A
@Subscribe
public void onEventA(NewEvent newEvent) {
    Log.i(TAG, "This is 订阅者A");
}
//订阅者B
@Subscribe
public void onEventB(NewEvent newEvent) {
    Log.i(TAG, "This is 订阅者B");
}

我们写两个订阅事件是为了说明订阅者之间接收消息是没有先后顺序的。(但是我测试的结果总是订阅者A先响应)

一开始我居然忘记加上@Subscribe注解,真是的。

最后调试结果如下:

06-30 10:27:08.810 8454-8454/com.myapplication I/MainActivity: This is 订阅者A
06-30 10:27:08.810 8454-8454/com.myapplication I/MainActivity: This is 订阅者B
06-30 10:27:11.372 8454-8454/com.myapplication I/MainActivity: This is 订阅者A
06-30 10:27:11.372 8454-8454/com.myapplication I/MainActivity: This is 订阅者B
06-30 10:27:13.007 8454-8454/com.myapplication I/MainActivity: This is 订阅者A
06-30 10:27:13.007 8454-8454/com.myapplication I/MainActivity: This is 订阅者B

后面我还要再深入学习一下这个Otto框架,请看另一篇博客,哦不好意思,我还没写呢。

要不,我给您唱首歌:http://changba.com/s/AdwbB4FU-ZW6n7vEyIWZbQ?&code=Kxhsv6044ik&from=pcrecommend

见笑了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值