我们如果这样一种业务场景。如今在做一款及时聊天应用,我们在聊天页面进行收发信息。同一时候也要实时更新前一页面的聊天记录,这时我们该怎样去实现?说说我曾经的实现策略。我使用的是广播接收器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技术。一起壮大我们的微信干货分享社区。

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

转载于:https://www.cnblogs.com/hrhguanli/p/4677585.html

事件总线帧---Otto相关推荐

  1. RxJava实现事件总线——RxBus

    事件总线的好处在于方便组件之间的交互,RxBus不是一个库,而是使用RxJava实现事件总线的一种思想.首先介绍一下RxJava与事件总线的不同之处. RxJava使用的是Observable-Obs ...

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

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

  3. Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析

    前言:Otto事件总线 -- 组件之间通讯框架 对于之前的情况activity之间或者fragment之间等跳转传值一般都是用bundle.intent等,从activityA --- activit ...

  4. 《Android进阶之光》--事件总线

    No1: EventBus三要素: 1)Event:事件 2)Subscriber:事件订阅者 3)Publisher:事件发布者 No2: EventBus的4种ThreadMode(线程模型): ...

  5. java eventbus 原理_事件总线,事件驱动(RxJava,EventBus)与广播(BroadcastReceiver)(2)

    > 事件总线与广播 事件总线通过注解或者反射的方式自动维护和调用. otto和AndroidEventBus采用的是注解,EventBus则是规定方法名基础上采用反射. 从调度策略角度,Even ...

  6. Android事件总线设计(一)- EventBus初步学习

    Android事件总线设计(一) 我们通常在进行安卓设计的时候,不同的Activity,Fragment,Service等之间通讯一直是个不小的问题,用Intent以及Handler都觉得有一点麻烦, ...

  7. Android事件总线(一)EventBus3.0用法全解析

    相关文章 Android事件总线(一)EventBus3.0用法全解析 Android事件总线(二)EventBus3.0源码解析 Android事件总线(三)otto用法全解析 Android事件总 ...

  8. AndroidEventBus(事件总线)了解+实战体验

    转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/51225186 大家好,今天咱们来说说本人最近使用到的一个新的开源工具类,也就是 ...

  9. 《android进阶之光》——事件总线(下)

    今天看了这本书关于事件总线的剩余部分,主要讲的是otto. otto与EventBus用法差不多,不同的地方是: 1.otto不是单例模式的,每次使用都要创建一个实例,建议使用的时候用单例模式包起来 ...

最新文章

  1. angular 控件css_Angular 4 设置组件样式的几种方式
  2. Apache Solr入门教程
  3. AndroidStudio中提示:This project uses AndroidX dependencies, but the ‘android.useAndroidX‘ property is
  4. 根据当前日期返回星期数
  5. .Net Compact Framework 高级篇(2)-- 扩展SOAP应用
  6. iOS 获取设备的方向
  7. ESS And 迅雷5 让我不能上网
  8. sdut 2493 Constructing Roads (图论)
  9. CentOS7.0+phpwind9.0.1环境搭建
  10. java将多个excel合并为一个
  11. 图解等差数列和等比数列求和公式
  12. html正方形符号,html 特殊符号标记
  13. Unity3D之FingerGestures学习
  14. 支付宝小程序JS省市区三级联动
  15. 微信企业号开发和配置
  16. 【php-fpm】重启、启动、关闭
  17. 计算机提示应用程序无法启动,提示“应用程序无法正常启动(0xc000007b)”怎么办?原因和解决方法...
  18. Java分布式全局ID(一)
  19. 计算机病毒攻击战是指将什么病毒,计算机病毒攻击战是指将( )植入敌方计算机系统,删除其数据,瘫痪其系统。...
  20. 轻巧画图工具_Web的轻巧灵活的表格组件

热门文章

  1. Promise方法汇总
  2. ant-Design------select的option 随页面滚动的问题
  3. Linux---多线程
  4. Error:Expected linebreaks to be ‘LF‘ but found ‘CRLF‘ linebreak-style
  5. 【jQuery学习】—jQuery对象的串联
  6. python编写的心得_Python开发之我的小心得
  7. cad常青藤插件_CAD 2020软件安装包+插件大合集+完整视频教程,自学也可以的
  8. 夜班工作有哪些优缺点?
  9. 海员可以饮用蒸馏海水吗?
  10. 属马的人性格有什么缺点和优点?