Otto使用入门

来源:互联网 发布:苹果5s怎么用4g网络 编辑:程序博客网 时间:2024/05/29 17:23


from : 以下介绍使用部分来自

http://blog.csdn.net/lzyzsd/article/details/42016681


补充说明:


Otto使用的好处:

1. 账号信息登录,凡是涉及账号信息的页面都要更新,没错,使用Otto比广播好用多了,subscribe方法接收的参数类型就可以区分接收器

2.主题更新 用户在设置那里更新主题,如白天黑夜模式

3.凡是一处改变,需要多处联动更新,都可以使用它



介绍

Otto 是square公司出的一个事件库(pub/sub模式),用来简化应用程序组件之间的通讯。

Otto 修改自Google的Guava库,专门为Android平台进行了优化。

使用

Otto本身是为Android平台专门开发的,使用的时候最好是使用单例模式。

Bus bus = new Bus();

bus对象只有作为单例共享的时候才足够高效,推荐使用依赖注入框架来注入单例对象或者采用类似的机制。


发布事件

发布一个事件很简单,调用post方法就可以,post方法可以接受任何类型

bus.post(new AnswerAvailableEvent(42));

订阅事件

订阅只需要在方法上加上@Subscribe注解,同时在适当的地方调用register

[java] view plain copy
  1. @Subscribe public void answerAvailable(AnswerAvailableEvent event) {  
  2.     // TODO: React to the event somehow!  
  3. }  


注意subscribe方法接收的参数类型需要和post参数的类型一致或者是post参数类型的父类。

bus.register(this);

一旦调用了register方法,Otto就会通过反射去寻找所有带有@Subscribe或者@Produce注解的方法,并将这些方法缓存下来。只有在调用了register之后,该类里面标注了@Subscribe或者@Produce的方法才会在适当的时候被调用。另外,当不需要订阅事件的时候,可以调用unregister来取消订阅。

生产者


有时候当订阅某个事件的时候,希望能够获取当前的一个值,比如订阅位置变化事件的时候,希望能拿到当前的位置信息。Otto中@Produce正是扮演了这么一个生产者的角色。
@Produce也是用于方法,并且这个方法的参数必须为空,返回值是你要订阅的事件的类型。
[java] view plain copy
  1. @Produce public AnswerAvailableEvent produceAnswer() {  
  2.     // Assuming 'lastAnswer' exists.  
  3.     return new AnswerAvailableEvent(this.lastAnswer);  
  4. }  


使用@Produce之后,也需要调用bus.register()。调用了register方法之后,所有之前订阅AnswerAvailableEvent事件的方法都会被执行一次,参数就是produceAnswer方法的返回值,之后任何新的订阅了AnswerAvailableEvent事件的方法,也都会立即调用produceAnswer方法。

线程限制


可以指定@Subscribe和@Produce标注的回调方法所运行的线程,默认是在MainThread中执行。

[java] view plain copy
  1. // 这两个方法是等价的  
  2. Bus bus1 = new Bus();  
  3. Bus bus2 = new Bus(ThreadEnforcer.MAIN);  


如果不关心在哪个线程执行,可以使用ThreadEnforcer.ANY,甚至可以使用自己实现的ThreadEnforcer接口。
原创粉丝点击