android中的 Otto使用
来源:互联网 发布:淘宝客刷销量有什么用 编辑:程序博客网 时间:2024/06/05 08:29
1、介绍
Otto 是square公司出的一个事件库(pub/sub模式),用来简化应用程序组件之间的通讯。
Otto 修改自Google的Guava库,专门为Android平台进行了优化。
2、使用
Otto本身是为Android平台专门开发的,使用的时候最好是使用单例模式。
Bus bus = new Bus();
bus对象只有作为单例共享的时候才足够高效,推荐使用依赖注入框架来注入单例对象或者采用类似的机制。
3、发布事件
bus.post(new AnswerAvailableEvent(42));
4、订阅事件
订阅只需要在方法上加上@Subscribe注解,同时在适当的地方调用register
- @Subscribe public void answerAvailable(AnswerAvailableEvent event) {
- // TODO: React to the event somehow!
- }
注意subscribe方法接收的参数类型需要和post参数的类型一致或者是post参数类型的父类。
bus.register(this);
一旦调用了register方法,Otto就会通过反射去寻找所有带有@Subscribe或者@Produce注解的方法,并将这些方法缓存下来。只有在调用了register之后,该类里面标注了@Subscribe或者@Produce的方法才会在适当的时候被调用。另外,当不需要订阅事件的时候,可以调用unregister来取消订阅。
5、生产者
有时候当订阅某个事件的时候,希望能够获取当前的一个值,比如订阅位置变化事件的时候,希望能拿到当前的位置信息。Otto中@Produce正是扮演了这么一个生产者的角色。
@Produce也是用于方法,并且这个方法的参数必须为空,返回值是你要订阅的事件的类型。
- @Produce public AnswerAvailableEvent produceAnswer() {
- // Assuming 'lastAnswer' exists.
- return new AnswerAvailableEvent(this.lastAnswer);
- }
使用@Produce之后,也需要调用bus.register()。调用了register方法之后,所有之前订阅AnswerAvailableEvent事件的方法都会被执行一次,参数就是produceAnswer方法的返回值,之后任何新的订阅了AnswerAvailableEvent事件的方法,也都会立即调用produceAnswer方法。
6、线程限制
可以指定@Subscribe和@Produce标注的回调方法所运行的线程,默认是在MainThread中执行。
- // 这两个方法是等价的
- Bus bus1 = new Bus();
- Bus bus2 = new Bus(ThreadEnforcer.MAIN);
如果不关心在哪个线程执行,可以使用ThreadEnforcer.ANY,甚至可以使用自己实现的ThreadEnforcer接口。
0 0
- android中的 Otto使用
- Android Otto 的使用
- Android Otto 使用
- android事件总线 otto使用
- EventBus和otto消息机制在Android Studio中的简单使用
- Android中使用Otto来传播事件
- Android上的otto的使用
- Android事件总线框架Otto使用
- Android 的Otto插件的使用
- Android 事件总线Otto使用入门一
- Android事件总线 Otto框架使用
- Android 中关于otto的使用
- Android otto 事件总线的使用(使用场景)
- 浅学使用Android的mvp模式+otto消息总线
- android中Otto事件总线框架的使用
- Android Otto框架浅析
- Android Otto框架浅析
- Android Otto框架浅析
- 使用Unix Shells进行大括号扩展
- 对TexStudio配置拼写和语法检查LanguageTool功能
- RtmpServer系列
- 接口测试之基础篇2
- spring + mybatis配置多个数据源
- android中的 Otto使用
- ftp身份认证时登录框反复弹出以及ftp常用配置
- Position属性四个值:static、fixed、absolute和relative的区别和用法
- Android卡片布局的两种实现方式
- 线段树
- win7guest账户开启方法
- 历届试题 回文数字
- Consul,在路上
- Libevent学习之处理可读 and 可写事件