解析观察者模式在安卓程序中的应用——如何实现跨界面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所造成的内存负担。

原文地址:https://www.cnblogs.com/revue/p/9834063.html

时间: 2024-10-02 08:59:20

解析观察者模式在安卓程序中的应用——如何实现跨界面Handler通讯的相关文章

Https漏洞在安卓程序中

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息.握手过程的简单描述如下:1.浏览器将自己支持的一套加密规则发送给网站.2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器.证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息.3.获得网站证书之后浏览器要做以下工作:a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏

Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?

本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用Java的JAR,使用JAVA的类?如果能够这样做,那么就意味着我们把Delphi开发的安卓程序扩展到了一个更大的开发范围了,理论上可以调用任意JAVA编写的代码,对于同时精通Delphi和JAVA的程序员来说,简直如虎添翼!! 我差不多用了一天时间吧,最终在老猫的帮助下,成功实现了在Delphi XE7的安卓程序中调用JA

【原创】开发第一个安卓程序(教程系列贴)

[面向人员]:立志于安卓开发的所有人员,做到真正的从零基础起步: [教程说明]:本教程在内容上保证原创.简洁.详细,在附件链接上保证可用.最新.完整: [回帖说明]:教程有不清晰的地方,请及时回帖互动,楼主会第一时间更新帖子,谨以此开源.分享.共进. 1.通过代理在线更新SDK 依次打开安卓001教程建立的开发文件夹,android/develope,找到并双击SDK Manager.exe可执行文件 稍等片刻,自动弹出Android SDK Manager Log窗口,窗口内未配置代理钱会显示

MFC Wizard创建的空应用程序中各个文件内容的解析

创建的MFC应用程序名为:wd,那么: 一.wd.h解析 // wd.h : main header file for the WD application // #if !defined(AFX_WD_H__89BE48D2_F377_4DF1_8C44_4D7372A61CE0__INCLUDED_) #define AFX_WD_H__89BE48D2_F377_4DF1_8C44_4D7372A61CE0__INCLUDED_ //////////////////////////////

冲向大牛之安卓:学习界面怎么在程序中画出来

今天看了一个内存管理软件,界面全是在程序中画出来的,了解后才发现原来这种内存管理软件因为界面时常在变化所以只能在程序中通过代码来实现,这就要设计到安卓中的view类了,直接上代码: import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android

通过assets像安卓程序目录中导入数据库文件出现错误的解决办法

错误提示如下,下面的错误信息 08-13 07:36:31.396: W/System.err(9814): java.io.IOException 08-13 07:36:31.416: W/System.err(9814):  at android.content.res.AssetManager.readAsset(Native Method) 08-13 07:36:31.416: W/System.err(9814):  at android.content.res.AssetMana

捕捉WPF应用程序中XAML代码解析异常

原文:捕捉WPF应用程序中XAML代码解析异常 由于WPF应用程序中XAML代码在很多时候是运行时加载处理的.比如DynamicResource,但是在编译或者运行的过程中,编写的XAML代码很可能有错误,此时XAML代码解析器通常会抛出称为XamlParseException的异常.但是抛出的XamlParseException异常提供的信息非常简单,或者是很不准确.此时我们关于通过对变通的方法来获取更多的异常信息: 我们知道,WPF应用程序中的XAML代码是在InitializeCompon

浅谈高大上的微信小程序中渲染html内容—技术分享

大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxParse 小程序刚上线那会儿,是无法直接渲染HTML内容的,于是就诞生了一个叫做「 wxParse 」的库.它的原理就是把HTML代码解析成树结构的数据,再通过小程序的模板把该数据渲染出来. rich-text 前端精品教程:百度网盘下载 后来,小程序增加了「rich-text」组件用于展示富文本内

【Qt for Android】第一个安卓程序

1)首先需要去官网上下载 Qt for android 版本的 Qt SDK 2)下载 android 相关的 SDK,下载地址不用找了,在Qt Creator工具选项的Android配置中有相应的下载链接地址. 3)下载完安卓SDK后,在上面的配置界面中指定相应SDK的目录,然后在"Build & Run"中新增Android的Kits 4)编写Qt代码后,点击"Run"即可,在弹出的Android设备列表中,选择程序要安装运行的Android设备.(下图