解析观察者模式在安卓程序中的应用——如何实现跨界面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通讯的更多相关文章
- 安卓程序中手机后退键与标题栏后退键是不同的,前者回出发onBackPressed()函数,后者需要重重写temclick函数
安卓程序中手机后退键与标题栏后退键是不同的,前者回出发onBackPressed()函数,后者需要重重写temclick函数
- Unity3D安卓程序中提示窗与常用静态方法封装
Unity3D/安卓封装SDK常用方法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 IO -- - ...
- Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?
本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用JAVA的JAR,使用JA ...
- 微信小程序中时间转化为时间戳(安卓和苹果兼容性)
在IOS中时间显示NAN,后来才知道是由于安卓和IOS时间解析时间的时间格式不一致: 在安卓机中2018-06-21 16:00:21 IOS识别的格式是 2018/06/21: 所以在处理IOS机器 ...
- Delphi XE7中开发安卓程序一些有用的帮助资源
说明:要想看到下面资源,打开帮助后,在搜索里面输入URL最后一部分,如果最后带“.html”,则把它删除,随后搜索一下,就看到了. 例如:想看下面的FireMonkey类关系图,只在搜索里面输入&qu ...
- MFC Wizard创建的空应用程序中各个文件内容的解析
创建的MFC应用程序名为:wd,那么: 一.wd.h解析 // wd.h : main header file for the WD application // #if !defined(AFX_W ...
- 捕捉WPF应用程序中XAML代码解析异常
原文:捕捉WPF应用程序中XAML代码解析异常 由于WPF应用程序中XAML代码在很多时候是运行时加载处理的.比如DynamicResource,但是在编译或者运行的过程中,编写的XAML代码很可能有 ...
- 安卓WebView的使用,在应用程序中嵌入一个浏览器,轻松地展示各种各样的网页
WebView 在应用程序中嵌入一个浏览器,轻松地展示各种各样的网页. 1.定义一个WebView位置 <?xml version="1.0" encoding=" ...
- 安卓程序代写 网上程序代写[原]Android之Bluetooth编程
ViewGroup 相关资料 : http://www.incoding.org/admin/archives/199.html http://bbs.csdn.net/topics/37014474 ...
随机推荐
- oracle中用while循环查询1到100的质数(素数)
declare i number:=1; --表示当前数字 j number:=0; --从2开始,存储判断的数字 sum1 number:=0;--总数begin while(i<100) ...
- 初写Linux脚本坑记录
1.为变量赋值时=前后一定没有空格. 2.赋值时变量为xx,读取才是$xx.如赋值是$xx,则报语法错误.参考 http://www.jb51.net/article/52375.htm 3.脚本每句 ...
- 60行python代码分析2018互联网大事件
2018年是改革开放四十周年,也是互联网发展的重要一年.经历了区块链,人工智能潮的互联网行业逐渐迎来了冬天.这一年里有无数的事件发生着,正好学了python数据处理相关,那么就用python对18年的 ...
- git撤销merging
$ git pull origin test // git pull合并代码的时候,若发生冲突,会处于merging状态,检查代码,发现自己的分支低于主分支,这个时候想撤销merge // 撤销mer ...
- web应用及web.xml
一.创建web应用 1.在任意目录新建webDemo文件夹 2.在webDemo下新建WEB-INF文件夹(注意大小写) 3.在WEB-INF中新建web.xml文件(可以copy已有的web应用中的 ...
- 剑指offer用位运算实现两个数相加,及python相关的位操作
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution: def Add(self ...
- debian系linux墙内安装安全工具集
虽然有kali linux这样集合了很多安全工具的操作系统,但是kali的软件源相对老旧,没有ubuntu等主流debian系统丰富,kali默认使用su权限进入图形化界面也是违背linux权限机制的 ...
- 2018-2019-2 《网络对抗技术》Exp6 信息搜集与漏洞扫描 20165326
信息搜集与漏洞扫描 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 基础知识 间接:不接触目标,无直接连接访问,使用辅助模块进行收集分析 DNS:执行各种相关查询 搜索引擎 直接:建立逻辑连 ...
- ecside中<c:table>使用
<ec:table action="sjzc/tbWaterproject!list.do" items="objList" var="tbWa ...
- UML 类图口诀
UML类图口诀: (10G:实线继承)空三角实线指向被继承, (虚实:虚线实现)空三角虚线指向被实现, (恐惧:空棱形聚合)空棱形实线(棱形)指向聚合整体.部分作为成员变量. (十足:实棱形组合)实棱 ...