第一章、OTTO事件总线
Otto是一个在Android中的事件总线框架,它是square的一个开源框架,针对事件提供统一订阅、发布以达到组件间通信的解决方案。
OTTO优势及使用场景。
Android 从4.0开始引入Fragment,主要是为了解决屏幕碎片化的问题。Fragment之间以及Fragment和Activity的通信通过interface实现,过多的interface会使程序变得复杂、耦合度增大。OTTO就是为了解决这个问题而出现的。
OTTO的主要方法介绍
主要的方法:
• register(Object o):注册,注册以后可以订阅事件
• unregister(Object o)注销,放弃对之前的订阅的所有事件
• post(Object o)发布事件,会被有Subscribe注解的方法获取到
注解:
• @Subscribe:
- 调用了register后有效
- 表示订阅了一个事件,并且方法用 public 修饰的
- 方法名可以随意取,重点是参数
• @Produce:
- 通知Bus该函数是一个事件产生者,产生的事件类型为该函数的返回值。
OTTO的使用
1、导入Jar包:在http://square.github.io/otto/下载最新的jar包,放入module的libs目录中,右键Add as libarary。
或者在build.gradle的dependencies中加入下面代码:
implementation 'com.squareup:otto:+'
2、实例化Bus类,最好单例模式。
public class BusProvider {
private static final Bus BUS=new Bus();
public static Bus getInstance(){
return BUS;
}
private BusProvider(){}
}
3、在Activity或Fragment中注册代码
onCreate中:BusProvider.getInstance().register(this);
onDestory中:BusProvider.getInstance().unregister(this);
4、创建一个类,在发送端使用post发送这个类的实例
public class MyEvent {
public static final int EVENT_FROM_UP = 1;
public static final int EVENT_FROM_DOWN = 2;
private int event;
private String msg;
public MyEvent(int event,String msg) {
this.event = event;
this.msg=msg;
}
public int getEvent() {
return event;
}
public String getMsg() {
return msg;
}
}
5、接收端使用@Subsribe注解创建方法
@Subscribe
public void onMyEvent(MyEvent event){
Log.d("####", "onActivityEvent: "+event.getEvent()+","+event.getMsg());
}