美文网首页Android知识程序员今日看点
HandlerFrame一个基于观察者模式采用信息分发机制实现跨

HandlerFrame一个基于观察者模式采用信息分发机制实现跨

作者: 木子v大可 | 来源:发表于2016-07-22 09:19 被阅读1852次

    启示录: HandlerFrame是一个基于观察者模式采用信息分发机制实现跨界面Handler通讯框架,整个项目里面只存在一个Handler实例对象。

    HandlerFrame下载地址-点击进入

    在实际开发中你是不是也曾经因为handler通讯造成内存吃紧过呢?又或者因为无法跟其它页面通讯而苦苦摸索过呢?

    恭喜你答对了,这些我都遇到过。

    何时使用跨界面通讯:当前页面有些操作成功之后会影响其它页面数据变化,就要使用跨界面通讯。

    相信做过电商的朋友们应该都知道购物车概念吧!(购物车-->购买-->清空购物车)购物车的概念差不多都是这个样子的。

    购买成功是不是就要发消息告诉购物车页面刷新数据,此时就要跨界面通讯了。

    前言:HandlerFrame的由来

    我封装的HandlerFrame框架其实是因为有人给我灵感才完成的。

    这个人就是Nohttp的作者严振杰-严振杰的博客-点击进入

    因为那段时间我确实遇到因为Handler造成的内存吃紧问题,正好他封装了一个超简单的Handle,优化内存的Handler工具。然后我就拿来用参考一下。在参考的过程中我发现他写的这个调用起来太繁琐了,而且耦合性太高了,所以我就在他的那个工具灵感下重新封装一个‘使用观察者模式对信息发送采取信息分发机制去封装。让操作界面之间通讯完全解耦,调用起来没有那么繁琐。优化Handler内存,且跨界面通讯。’的Handler框架。

    透露一个小秘密0_0....我在封装好这个Handler框架时,我特么都不知道什么是观察者模式信息分发机制(一直都是一个人开发,没有人指点,所以......你懂的。)。你是不是想问,既然你都不知道什么是观察者模式,那特么你还说你这个是基于观察者模式封装的?哈哈....这个其实也要感谢严振杰-严振杰的博客-点击进入了。因为我把封装好的框架发给他看时,是他告诉我这个封装是用观察者模式去的。我记得我当时还特意去搜了一下,才知道这确实观察者模式封装。

    我发现只要你的技术达到一个高度之后,你写的代码不知不觉就进入你都不曾了解的世界里面去了。

    主题内容

                                                                          HandlerFrame架构图(画的不好,请多多见谅)

    HandlerFrame架构 主要部分

    一:BaseHandler核心类(代码截图请实际代码为主)

    BaseHandler继承Handler采取单例模式

    然后在BaseHandler对象里面用稀疏数组SparseArray存储OnBaseHandlerUpDateListener接口实现对象,然后通过实现Handler中的handleMessage()去发送信息给OnBaseHandlerUpDateListener接口实现对象。

    SparseArray存储的key通过OnBaseHandlerGetKeyListener接口去获取订阅对象的唯一ID。SparseArray存储的value用SoftReference软引用做载体存储。

    如果注销订阅,通过OnFactoryOperateListener接口去清除订阅对象生成存储的ID。

    BaseHandler类实现OnBaseHandlerMethodListener接口对SparseArray对象的增删查调等方面的操作。

    BaseHandler对象01 BaseHandler对象02 BaseHandler对象03

    二:BaseHandlerOperate核心类(代码截图请实际代码为主)

    BaseHandlerOperate主要是通过操作OnBaseHandlerMethodListener接口对BaseHandler进行控制。

    BaseHandlerOperate实现OnBaseHandlerGetKeyListener接口,在重写handlerGetKey()方法中通过BaseHandlerFactoryId对象去生成订阅对象唯一的ID值。

    BaseHandlerOperate实现OnFactoryOperateListener接口对BaseHandlerFactoryId对象中的订阅对象ID做注销操作。

    BaseHandlerOperate实现OnBaseHandlerOperateListener接口是为了让其他接口实现方法屏蔽对外操作。提现接口隔离原则。

    BaseHandlerOperate类是为了更好让BaseHandler和Activity解耦。

    BaseHandlerOperate对象01 BaseHandlerOperate对象02 BaseHandlerOperate对象03


    BaseHandlerFactoryId对象是专门生产订阅对象唯一ID对象。通过算法保证订阅对象生成的ID值唯一性。具体怎么实现的请参考代码。


    三:OnBaseHandlerMethodListener接口(代码截图请以实际代码为主)

    OnBaseHandlerMethodListener接口

    四:OnBaseHandlerUpDateListener接口(代码截图请实际代码为主)

    OnBaseHandlerUpDateListener接口

    简单使用说明(代码截图请以Demo实际代码为主)

    用一个Acitivty基类去实现OnBaseHandlerUpDateListener接口,然后获取BaseHandlerOperate实例。

    举了个栗子

    然后继承BaseActivity的子类就可以调用BaseHandlerOperate里面的方法去进行你想要的操作就可以了,

    举了个栗子 当前对象通过BaseHandlerOperate向Basehandler指定注册对象发送信息

    HandlerFrame下载地址-点击进入

    如果你能使用期间发现问题,代表你有一双发现问题眼睛。如果你能把问题反馈给我,说明你有一份乐于助人的心灵。

    相关文章

      网友评论

        本文标题:HandlerFrame一个基于观察者模式采用信息分发机制实现跨

        本文链接:https://www.haomeiwen.com/subject/xnmvjttx.html