Otto是square(这是一个很牛逼的开源公司,以后还将介绍其他的开源项目)公司出的一个事件库,可在应用程序内(非跨进程的)所有类之间进行通信。使用这种方式,可以使代码量减少,可读性增加,降低耦合,接下来就讲一下如何使用。
获取Bus对象
建议使用单例模式,获取
Bus bus = new Bus();
发布事件
bus.post(new CustomEvent()),CustomEvent是自定义的一个类,当然可以写成有参数的构造方法来传递数据。
还有一种利用
订阅事件
接收事件通知,只需要在方法上加上@Subscribe注解
@Subscribe
public void receivedEvent(CustomEvent event)
这里的event要和上面post的一样,函数名随意。
注册
发布和订阅都完成了,最后还有重要的一步,就是注册,无论是发布事件的类还是订阅事件的类都需要注册和注销
bus.register(this);
bus.unregister(this);
生产
@Produce
public AnswerAvailableEvent produceAnswer() {
// Assuming 'lastAnswer' exists.
return new AnswerAvailableEvent(this.lastAnswer); }
使用Produce 注解之后,订阅者在注册之后,bus将会获取当前已知的值lastAnswer,发送给订阅者。
好了,这样就可以了,要注意注册和注销的使用的位置。