我们如果这样一种业务场景。如今在做一款及时聊天应用,我们在聊天页面进行收发信息。同一时候也要实时更新前一页面的聊天记录,这时我们该怎样去实现?说说我曾经的实现策略。我使用的是广播接收器BroadCastReceiver,在接收和发送消息的时候就不停去发送广播,然后在须要实时更新的地方进行接收更新。实现的思想比較简单,也不存在代码上的耦合问题,可是有个弊端。弊端就是须要去在非常多地方实现BroadCastRecevier,代码虽不算冗余,但比較多,看起来非常是不爽。

今天为大家介绍的Otto。就能彻底解决代码体积的问题。Otto是一款眼下比較流行事件总线框架,旨在保持应用各页面和模块之间通信高效的前提下,相应用进行解耦。Otto的使用非常easy,源代码也仅仅就9个类,几千行代码,开放出来的api也间接明了。Otto是基于订阅/公布(Subscribe/Publish)这样一种设计模式,简单来说。假设你想订阅某个消息,使用@Subcribe注解就可以进行接收,同一时候使用

Bus.post(Object obj)进行消息的公布,这种设计达到了全然的解耦。

以下分步骤为大家简介下使用过程。

一、Bus实例化

Bus这个类是整个框架的灵魂,它负责消息的公布和接收,整个流程都是经过这个Bus去实现的。Bus的实例化推荐使用单例,就是说整个应用内仅仅实例化一个Bus对象,全部的消息的处理都是经过这单一的实例去实现。

由于要实现消息的接受者接收到公布的消息。一定要经过同一个Bus对象的处理。Bus的构造器能够接收ThreadEnforcer类型的參数,ThreadEnforcer事实上是一个接口,它自身有两个实现,分别表示Bus执行在Main Thread中还是异步线程中。

二、注冊和解绑Bus

依据详细的业务需求进行Bus的注冊和解绑,对于android中的组件,通常是基于生命周期方法中去实现。同一时候假设是随意你自己定义的类中都能够进行。以下展示的是在Activity和Fragment里面实现。

三、消息的公布

公布消息是整个框架中最重要的部分,它同意你告诉全部的订阅者一个事件已经触发。

不论什么一个类的实例对象都能够通过总线Bus去公布。同一时候也仅仅能被订阅这样的对象的接受者所接收。以下展示的是通过Bus去公布一个消息,消息的内容是LocationChangeEvent,所以LocationChangeEvent的接受者都能接收到此公布的消息。

注意的是,公布消息仅仅能一个Object对象。

四、消息的订阅

消息的订阅和公布之前都要在当前的类中进行Bus的注冊。订阅是对消息公布的补充,当消息公布的事件调用之后,相应的消息订阅者就能马上接收到此消息。

实现订阅功能是通过自己定义方法实现的。方法的名称能够任意。同一时候还得须要满足三个条件。

1、方法前使用@Subscribe注解

2、訪问修饰符为public

3、单一參数。依据你想订阅的消息进行设置

注:使用之前,记得进行注冊;使用完成。记得释放。

五、消息的produce

当订阅者注冊完成,针对特定的消息。通常也须要获取当前已知的值。这个时候,就须要用到produce。相同的使用produce的方法名称能够任意,同一时候有三点须要注意。

1、方法前使用@produce注解

2、訪问修饰符为public

3、无參。返回值是基于订阅者參数类型

好了。Otto的使用就是这些了。

快去重构代码,摆脱无尽的广播吧!

当然Otto的缺点也是有的。要实现上述订阅/公布模型的功能,付出的代价就是对各个注冊Bus的类进行反射。假设大量的使用的情况下,相应用的性能多少有点副影响。

Otto源代码和Demo地址:https://github.com/square/otto

假设认为对你有所帮助。欢迎大家订阅我的微信公众账号——Android干货分享(ID:android_share)。以下是微信的二维码,为你提供及时高质的Android干货。

技术交流QQ群:318588906,欢迎大家加群,共同探讨下Android和Java技术。一起壮大我们的微信干货分享社区。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

事件总线帧---Otto的更多相关文章

  1. 事件总线框架---Otto

    我们假设这样一种业务场景,现在在做一款及时聊天应用,我们在聊天页面进行收发信息,同时也要实时更新前一页面的聊天记录,这时我们该如何去实现?说说我以前的实现策略,我使用的是广播接收器BroadCastR ...

  2. Android学习系列(43)--使用事件总线框架EventBus和Otto

    事件总线框架 针对事件提供统一订阅,发布以达到组件间通信的解决方案. 原理 观察者模式. EventBus和Otto 先看EventBus的官方定义: Android optimized event ...

  3. Otto事件总线框架的使用

    Otto是一个在Android中的事件总线框架,它是square的一个开源框架,具体介绍点击这里,项目下载点击这里 为什么要使用Otto事件总线: 通常来说在Android中: 1.Activity与 ...

  4. Android事件总线(四)源码解析otto

    前言 上一篇文章中讲到了otto的用法,这一篇我们来讲一下otto的源码.可能有人觉得otto过时了,但是通过源码我们学习的是高手设计otto时的设计理念,这种设计理念是不过时的. otto各个类的作 ...

  5. android开源项目之OTTO事件总线(二)官方demo解说

    官方demo见  https://github.com/square/otto 注意自己该编译版本为2.3以上,默认的1.6不支持match_parent属性,导致布局文件出错. 另外需要手动添加an ...

  6. android开源项目之OTTO事件总线(一)

    Otto是由Square发布的一个着重于Android支持的基于Guava的强大的事件总线,在对应用程序不同部分进行解耦之后,仍然允许它们进行有效的沟通. 开源项目地址:https://github. ...

  7. AndroidEventBus ( 事件总线 ) 的设计与实现

    1. 功能介绍 AndroidEventBus是一个Android平台的事件总线库, 它简化了Activity.Fragment.Service等组件或者对象之间的交互,非常大程度上减少了它们之间的耦 ...

  8. Guava: 事件总线EventBus

    EventBus 直译过来就是事件总线,它使用发布订阅模式支持组件之间的通信,不需要显式地注册回调,比观察者模式更灵活,可用于替换Java中传统的事件监听模式,EventBus的作用就是解耦,它不是通 ...

  9. EventBus 事件总线 案例

    简介 地址:https://github.com/greenrobot/EventBus EventBus是一个[发布 / 订阅]的事件总线.简单点说,就是两人[约定]好怎么通信,一人发布消息,另外一 ...

随机推荐

  1. Oracle cloud control 12c 怎样改动sysmanpassword

        前阵子在虚拟机部署了Oracle Cloud Control 12c.事别几日,居然忘记了登录password. 主要是由于如今的Oracle有关的Software比之前提供更强的安全机制.什 ...

  2. 减少可执行程序size的三个常用软件

    减少可执行程序size的三个常用软件 linux下面,直接用strip 这个命令 #:strip xxx 可以去掉编译调试信息和各种符号表,能够大大减小可执行程序size windows下面这种exe ...

  3. C++ 中使用boost::property_tree读取解析ini文件

    boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是  ...

  4. JCL学习

    JCL基本概念 定义:job control language 用户与操作系统的接口,用户通过JCL语句按照自己的意图来控制作业的执行. JOB的概念:把大机要实现的每一项任务,称为一个JOB或作业. ...

  5. Swift - 使用CGBlendMode改变UIImage颜色

    类似于PS,Swift中也可对图片UIImage进行图层混合(blending),而且提供了相当丰富的混合模式(blendMode).本文先介绍使用其中的kCGBlendModeDestination ...

  6. 最短路径A*算法原理及java代码实现(看不懂是我的失败)

    算法仅仅要懂原理了,代码都是小问题,先看以下理论,尤其是红色标注的(要源代码请留下邮箱,有測试用例,直接执行就可以) A*算法 百度上的解释: A*[1](A-Star)算法是一种静态路网中求解最短路 ...

  7. poj 百练 2765 八进制小数(精度问题)

    2765:八进制小数 查看 提交 统计 提示 提问 总时间限制:  1000ms  内存限制:  65536kB 描写叙述 八进制小数能够用十进制小数精确的表示.比方,八进制里面的0.75等于十进制里 ...

  8. linux 压缩和解压文件

    一.压缩:20120715文件下面所有的文件 如下: tar -zcvf 20120715.tar.gz  20120715* 二.解压20120715.tar.gz压缩包 如下: tar -xzvf ...

  9. U盘只剩下快捷方式

    原理: 其实,这个是一种叫1KB病毒(也称之为快捷方式病毒.风暴一号)惹的祸,它是一种恶意的蠕虫病毒,执行以下恶意操作:1.当你的U盘放到一个已经被感染 的主机上时,主机(我的电脑)上的病毒体进程首先 ...

  10. 动手学Javascript(1)——PopStar

    PopStar是一款很流行的手机游戏.它的基本规则是在某个方块上单击,如果该方块周围有和它颜色一样的方块,那么这些方块都被选中.之后在选中方块的某一个上再次单击,所有选中的方块就会消失. 如下图所示, ...