冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述解析观察者模式在安卓程序中的应用——如何实现跨界面Handler通讯相关的知识,希望能为你提供帮助。
这里特使用了github中的一个项目作为例子进行解析,地址为:https://github.com/LiqiNew/HandlerFrame/tree/master/handlerFrame/src/main/java/com/liqi/handler
本例子针对安卓程序实现了跨界面的Handler通讯。传统来说,安卓程序中的Handler是只能在一个界面类中运行的,并不能让他存在于其他的界面类,但在这个项目中,"只要在HandlerFrame里面订阅过的对象,在任何界面都可以发送信息去跟订阅对象通讯"。其使用了观察者模式来设计一个新的框架,类图如下所示:
文章图片
按照观察者模式的定义,上图中的BaseHandler为观察者,而BaseHandlerOperate为被观察者。其中BaseHandlerOperate作为被观察者,其工作是将BaseHandler收入订阅者队列并对观察者进行管理,包括删除和信息通知。在BaseHandlerOperate中,onSubscribe负责将观察者绑定在订阅者队列中,而sendMessage负责向观察者传递消息,removeFactoryKeyData则负责按照键值取消订阅,也可以用removeAllFactoryData将所有的订阅都删除。另外,在这个例子里也使用了工厂模式。BaseHandler在订阅之前需要经过BaseHandlerFactoryId进行预处理,生成符合规范的键值对后才可加入订阅。
在这样的设计之下,Handler与收发信息的控件之间不仅形成了松耦合的关系,还实现了跨界面的通信,大大便利了安卓程序内信息的流通,同时避免了生成过多Handler所造成的内存负担。
【解析观察者模式在安卓程序中的应用——如何实现跨界面Handler通讯】
推荐阅读
- Android开发 - 设置DialogFragment全屏显示
- mybatis百科-列映射类ResultMapping
- 万树IT(Android软件开发必学习的0基础内容)
- SVN:Android Studio设置忽略文件
- 使用mybatis逆向工程生成对应的beandao以及mapper
- 轻量ORM-SqlRepoEx (十四)最佳实践之Dapper
- Mybatis MetaObject和ObjectWrapper设计概念
- FunctorApplicative 和 Monad x
- c#开发移动APP-Xamarin入门