Otto EventBus实践
Otto 框架是由 Square 公司开发的,一款用于android 事件总线 EventBus,我们可以通过他来传递事件,具体使用请参考官网,这里我主要通过一个简单的例子来介绍我们在该如何使用这一框架
实践
在gradle加入依赖
compile 'com.squareup:otto:1.3.8'
其实总线这东西,和我们以前学Arm什么都是一样的,都是为了实现事件的分发,按照我们的思路,首先 我们要先生成一个总线
private static final Bus BUS = new Bus();
总线有了,我们需要把设备(Activity/Service等)绑定到总线上
mBus.register(this);
当然,用完我们需要解绑,这个可以在onDestroy中实现
mBus.unregister(this);
事件分发用
post(Object event)
接收事件,使用注解
@Subscribe
其实 这个就是一个订阅模式,因为这些都是套路,所有我封装了一个 EventBusBaseActivity,对绑定和解绑做了初始化
public class EventBusBaseActivity extends AppCompatActivity {
private final Bus mBus = BusProvider.getInstance();
protected Bus getBus() {
return mBus;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBus.register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mBus.unregister(this);
}
}
Bus这里使用了单例
public final class BusProvider {
private static final Bus BUS = new Bus();
public static Bus getInstance() {
return BUS;
}
private BusProvider() {
// No instances.
}
}
对了 ,还差一个最重要的,那么,如何把获知这个事件就是我需要的呢?其实很简单,主要有两点:
1.事件分发者和事件订阅者 绑定在同一个总线
2.分发的事件类型和指定的分发类型一致
第一点很好理解,要接收必须在同一个频段,不在同一个频段,咱两没啥好说的,说了也白说~
第二点比较有趣,在满足第一点的条件下,只要你和分发事件类型一样,就能接收,说明,事件分发后,所有满足条件的接收方都会受到信息,非常有趣
EventBus的原理就不深入了,其实总线也可以用我们最近学习的Rxjava来实现,我们下一篇文章将做详细介绍。