IT科技资讯
联系我们
你的位置:主页 > IT科技资讯 > 正文IT科技资讯
事件总线框架---Otto,总线框架---otto
编辑:admin 发布时间:2019-02-01

事件总线框架---Otto,总线框架---otto

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

今天为大家介绍的Otto,就能彻底解决代码体积的问题。Otto是一款目前比较流行事件总线框架,旨在保持应用各页面和模块之间通信高效的前提下,对应用进行解耦。Otto的使用很简单,源码也只就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技术,一起壮大我们的微信干货分享社区。


51单片机在单总线上读取两个DS18B20的温度显示问题,把程序简单的框架您看一下,字数太多,写不下了

先解决一个 18B20,不用系列号的。

再解决一个 18B20,使用系列号的。

最后,再解决二个 18B20,使用系列号的。

现在,你弄的规模这么大,难说在那一个步骤,有问题。
 
SOA总线服务基础框架是指什?

C++太苦,整天跟硬件内存打交道。
当然你认为自己能够吃苦热爱底层,你可以继续学c++因为它几乎是万能的。
如果是对编程感兴趣建议你学学java。或者c#。学到一定程度再决定转底层或者转框架架构。
不管是c++,java,c#,都要学学面向对象思想,设计模式。数据结构。(关于书嘛,迅雷上随便搜,图书馆也有N多。其实那些书80%讲的东西都差不多,先看国人写的入门书,再看经典红皮书)
然后最好跟着学校老师做几个项目。(否则你出来可不是那么好找工作的)学学软件工程,数据库,uml,SOA之类。
不过如果你下定决心要考的话,可以参考下面的资料。
这是2009年的考试大纲中的考试要求,LZ可以看一下啊!
考试要求
(1) 掌握数制及其转换、数据的机内表示、算术和逻辑运算、应用数学的基础知识;
(2) 了解计算机的组成以及各主要部件性能指标;
(3) 掌握操作系统、程序设计语言的基础知识;
(4) 熟练掌握基本数据结构和常用算法;
(5) 熟练掌握C程序设计语言以及C++、Java中的一种程序设计语言;
(6) 熟悉数据库、网络和多媒体的基础知识;
(7) 了解软件工程的基础知识、软件过程基本知识、软件开发项目管理的常识;
(8) 了解常用信息技术标准、安全性以及有关法律、法规的基础知识;
(9) 了解信息化及计算机应用的基础知识;
(10) 正确阅读和理解计算机领域的简单英文资料。

这个是考试的科目设置情况。
考试科目设置
(1)计算机与软件工程基础知识,考试时间为150分钟,笔试,选择题;
(2)程序设计,考试时间为150分钟,笔试,问答题。

这下面是是考试的范围

考试科目1:计算机硬软件基础知识
1. 计算机科学基础
1.1 数制及其转换
二进制、十进制和十六进制等常用数制及其相互转换
1.2 数据的表示
数的表示(原码、反码、补码表示,整数和实数的机内表示方法,精度和溢出)
非数值表示(字符和汉字的机内表示、声音和图像的机内表示)
校验方法和校验码(奇偶校验码、海明校验码)
1.3 算术运算和逻辑运算
计算机中二进制数的运算方法
逻辑代数的基本运算和逻辑表达式的化简
1.4 数学应用
常用数值计算(矩阵、方程的近似求解、插值)
排列组合、应用统计(数据的统计分析)

1.5 常用数据结构
数组(表态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树)、图的定义、存储和操作
1.6 常用算法
常用的排序算法、查找算法、数值计算、字符串处理、数据压缩算法、递归算法、图的相关算法
算法与数据结构的关系,算法效率,算法设计,算法描述(流程图、伪代码、决策表)

2. 计算机系统基础知识
2.1 硬件基础知识
2.1.1 计算机系统的组成,硬件系统、软件系统及层次结构
2.1.2 计算机类型和特点
微机、工作站、服务器、大型计算机、巨型计算机
2.1.3 中央处理器CPU
算器和控制器的组成,常用的寄存器、指令系统、寻址方式、指令执行控制、处理机性能
2.1.4 主存和辅存
存储器系统
存储介质(半导体、硬盘、光盘、闪存、软盘、磁带等)
主存储器的组成、性能及基本原理
Cache的概念、虚拟存储的概念
辅存设备的类型、特性、性能和容量计算
2.1.5 I/O接口、I/O设备和通信设备
I/O接口(总线、DMA、通道、SCSI、并行口、RS232C、USB、IEEE1394)
I&#......余下全文>>
 

http://www.bkjia.com/Androidjc/866410.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/866410.htmlTechArticle事件总线框架---Otto,总线框架---otto 我们假设这样一种业务场景,现在在做一款及时聊天应用,我们在聊天页面进行收发信息,同时也要实...

本文源自: AG环亚国际官网

上一篇:android的listview加checkbox实现单保存checkbox的勾选信息,androidlistview
下一篇:没有了