【PHP开源代码栏目提醒】:网学会员PHP开源代码为您提供Android平台上消息分发系统 精灵论文 - 综合课件参考,解决您在Android平台上消息分发系统 精灵论文 - 综合课件学习中工作中的难题,参考学习。
Android 平台上消息分发系统 高松高锦春刘春旭 北京邮电大学电子工程学院北京 100876 摘要第三代移动通信技术的应用极大促进了移动互联网络的发展用户对于随时随地获取 信息的要求也越来越迫切。
Android 是基于 Linux 平台、完全开放和免费的
开源手机操作系 统。
本文对 Andriod 操作系统平台的体系结构与开发环境进行了研究与分析在此基础上设 计了一种消息分发系统。
该系统采用 JMS 标准应用发布/ 订阅通信模式同时采用 iBus//Mobile 作为消息网关并且支持消息的异步推送与拉取。
本系统与传统的消息分发技 术相比对异构网络具有更好的兼容性。
关键词 计算机软件Android 操作系统JMSiBus//Mobile 中图分类号TP311.5 Design and Implementation for Message Distribution System on Android Platform GAO Song GAO Jinchun LIU Chunxu School of Electronic Engineering Beijing University of Posts and Telecommunications Beijing 100876 Abstract: The third generation mobile communications technology has greatly promoted the development of Mobile Internet. As a result user’s demands for accessing information anytime anywhere are more and more urgent. Android is a mobile operating system based on the Linux platform completely free and open-source. This paper firstly researched and analyzed the system architecture and the development environment of Android operating system platform then designed a message distribution system on Android. This system meets JMS standard uses publish/subscribe as communication model uses iBus//Mobile as a message gateway and supports pushing and pulling messages asynchronously. Comparing to traditional message distribution methods this system gets better compatibility for heterogeneous network. Key words: Computer Software Android Operating System JMS iBus//Mobile 0 引言 随着智能终端技术的发展以及第三代移动通信技术的进步人们对于随时随地获取信息 的要求变得越来越强烈对信息的需求在内容和获取方式上也出现了变化不再满足于使用 固定终端连接到互联网络上而是希望以一种相对稳定和可靠的形式从 Internet 上移动地 获取信息。
Android 是基于 Linux 平台的
开源手机操作系统由 Google 和二十多家重量级企 业联名提供技术支持。
其开放、自由精神Android 联盟的雄厚实力以及 APP 商店模式的巨 大成功使得 Android 操作系统有着很大的发展空间1。
Android 在设计之初就定位于作为未 来的移动互联网络终端不仅提升了用户的使用体验更为开发者提供了更加安全与便捷的 开发方案。
当前 Android 平台上的消息系统主要通过 RSS 技术实现其特点为信息发布的时效性 强、成本低廉用户可以根据自己的兴趣以不同的主题对新闻进行订阅。
但是目前 RSS 技 术并不支持用户消息推送用户只能被动地接收来源于 RSS 服务器的消息缺乏灵活性与 互动性。
RSS 依托于 HTTP 技术缺乏对异构网络的支持用户的接入方式受到一定限制。
发布/订阅 publish/subscribe 系统具有异步、多点通信的特点为信息的发布者和接收 作者简介高松. E-mail: gaosong.hysgmail.com 者提供了解耦装置和选择性的信息分发路径使通信的参与者在空间、时间和控制流上完全 解耦适应高度动态的网络环境和以数据为中心的网络路由2。
本文采用支持发布/订阅的 JMS 实现设计了一种 Android 平台上的数据分发系统为用户提供了良好的异构网络兼容 性以及完全平等的用户间信息分享方案。
1 操作系统平台及网络架构 1.1 Android 操作系统及其开发环境 Android 和其他操作系统一样采用了分层的架构。
从低层到高层分别是 Linux 内核层 系统运行库层应用程序框架层应用程序层。
Android 的内核为 Linux 2.6 版本位于软件栈层和硬件层之间。
Linux 内核之上为系统 库函数。
Android 重新设计了 Java
代码的运行环境主要是由核心库和 Dalvik 虚拟机构成。
核心库提供了 JAVA 编程语言核心库的大多数功能每个 Android 应用程序都在它自己的进 程中运行都拥有一个独立的 Dalvik 虚拟机实例。
Android 操作系统同一系列核心应用程序 打包一起发布所有的应用程序都是使用 JAVA 语言编写。
应用程序框架简化了组件的重用 任何一个应用程序都可以发布它的功能块并供其他的任何应用程序使用使用户可以方便 地替换程序组件 3。
本
论文使用的 SDK 版本为 android-sdk-windows-1.6_r1开发环境为 Eclipse 在 JDK1.6 下使用 Ant 工具进行编译。
1.2 系统的网络结构 图 1 系统的网络结构 系统的网络结构如图 1 所示本系统支持异构网络的接入支持发布/订阅终端以固定 IP 网络、WLAN、移动网络如 GPRS等形式接入终端发出的发布/订阅请求将在无线 消息网关处汇聚。
无线消息网关的引入消除了无线 JMS 应用与有线网络 JMS 应用之间的差 异使得无线通讯层对移动应用透明开发人员无须关心使用何种无线通讯方式而只需关 注于标准的 JMS 调用上。
作为在移动领域的扩展Softwire 公司的纯 Java 解决方案——iBus//Mobile 是这方面的 先行者。
它包括了一个用于连接无线移动网络和有线网络的消息网关用于 Java 可编程移 动设备的轻量级 JMS API 库以及可选择的后台 JMS 服务器 JMS provider。
可根据需要采 用固定 IP 网络、WLAN、移动网络等多种通讯方式4。
iBus//Mobile 相对于标准 JMS 系统的 不同之处在于其提供了一个 iBus//Mobile Gateway即消息网关由异构网络发送的数据将 汇集到消息网关处消息网关根据不同的消息类型提供了不同的接口对消息进行解析之后 发送到 JMS Provider 进行发布/订阅操作。
JMS Provider 返回的消息同样要经过消息网关分 发到异构网络的不同终端iBus 支持多种 JMS Provider 实现如 JBoss、ActiveMQ 等为 应用开发提供了一定的便利。
2 Android 客户端设计 如前节所述本文采用在移动终端与 JMS Provider 之间加入消息网关的方案来实现无线 发布/订阅系统。
iBus//Mobile 实现了这个消息网关从而屏蔽了网络底层结构的差异性。
本 节将重点研究如何使用 JMS 在 Android 平台上进行发布/订阅系统的开发。
2.1 Android 客户端的结构 图 2 Android 客户端结构框架 图 2 为 Android 消息客户端的实现结构图每个客户端由上层应用程序、SQLite 数据库 系统与发布订阅模块组成其中发布订阅模块又包括发布主题、订阅主题、线程管理三个部 分。
发布主题与订阅主题采用标准 JMS API 编写作为单独线程启动线程管理由 J2SE 开 发包中的 java.util.concurrent.ThreadPoolExecutor 类提供。
应用程序层包括消息显示模块、发布驱动模块、订阅驱动模块以及数据库驱动模块其 数据流图如图 3 所示。
数据库驱动模块对常用的 SQLite 数据库操作进行了封装实现了插 入删除修改以及查询等功能其中查询功能既支持按照主题查询又支持复合条件查询。
消息显示模块作为软件的用户界面提供快速按主题浏览消息标题的功能。
消息显示模块在 数据查询与更新时需要向数据库驱动模块发送操作请求和查询条件数据库驱动模块完成处 理之后将结果返回消息显示模块。
发布驱动模块用于启动一个发布线程消息发布成功之后 向数据库驱动模块发送消息的完整内容由数据库驱动模块完成消息的本地存储。
订阅驱动 模块用于启动一个订阅线程成功建立订阅并启动消息监听器之后每当收到新的消息时即 向数据库驱动模块发送消息的完整内容。
图 3 应用层程序的数据流图 Android 客户端可以选择多种接入方式进行消息的发布/订阅。
所有消息通过不同的接入 方式连接到网络最终汇聚到消息网关5由消息网关对消息进行处理之后交由 JMS Provider 执行发布/订阅操作。
JMS Provider 对收到的发布/订阅主题进行登记经过主题匹配及 QoS 检查之后经由消息网关将匹配成功的发布消息转发给感兴趣的订阅者。
2.2 消息发布流程 图 4 是发布模块的时序图。
接收到主控页面的准备发布消息后发布信息填写页面被激 活。
用户填写发布信息并点击发布时将激活发布线程同时将消息体传递给发布线程发 布线程开始执行发布操作发布成功后线程自动结束。
发布线程启动之后数据库驱动模块 也会被激活将消息的完整内容插入到本地数据库中数据库操作完毕并返回之后整个发布 流程结束。
消息的发布通过一个实现了 Runnable 接口的类 PubTopic 来实现每次进行发布 的时候会新建一个 PubTopic 的实例并随后启动一个新的线程在线程的 run 方法中执行标 准的 JMS 发布流程。
此时用户可以继续使用系统的其他功能而完全不受影响并且在发 布结束后发布线程将会自动关闭不需要用户提供额外操作实现了发布过程对用户的不透 明性。
2.3 消息订阅流程 图 4 消息发布时序 图 5 消息订阅时序 图 5 是主题订阅模块的时序图在用户准备开始订阅时订阅提交页面将会激活用户 在此处选择需要订阅的主题确定后开始订阅系统将会启动一个新的订阅线程用来负责订 阅消息订阅线程启动后将激活一个消息监听器用来捕获从 JMS 服务提供者处得到的消息 此时订阅线程进入等待状态由于在发布时将消息的标题和内容一起以消息体的方式来发 送所以当消息监听器收到新消息后必须重建这个消息之后激活数据驱动模块进行存储。
当用户发出取消订阅的命令时关闭订阅线程。
由于对主题的订阅需要阻塞线程才能监听是 否有新的消息若在主线程中执行订阅将引起整个程序的阻塞。
因此我们采用多线程的方式 既实现了多主题同时订阅又使主程序可以继续处理其他的任务。
3 客户端的实现 3.1 类结构图 本设计有五个 Activity每个 Activity 对应于一张用户界面。
忽略数据库驱动的实现部 分Android 上消息分发客户端的 UML6类结构图如图 6 所示 图 6 客户端类结构图 其中 ActivityMain 为软件主界面继承自 TabActivity为标签式结构每个标签代表一 个主题例如体育、科技、娱乐等主题关键词。
重载 TabActivity 的方法 onTabChangedString tabId以实现标签切换。
当用户切换标签时onTabChangedString tabId方法被调用根 据传入参数 tabId 执行不同的操作。
本设计中切换标签时将进行查询数据库、读取主题字段 等任务并将其显示在主界面相应的标签下。
ActivityReadTopic 继承自 ListActivity为列表 布局。
ActivityReadTopic 的实例对应于 ActivityMain 中的标签当 标签切换 时 ActivityReadTopic 的成员方法 renderListView负责从 SQLite 数据库中提取需要的主题信息 填写到列表中。
此外在每次发布主题、订阅主题之后renderListView同样需要被调用 以刷新屏幕显示向用户提供最新的发布订阅消息。
ActivityDisplayTopic 向用户显示某个消 息的详细内容当用户点击 ActivityReadTopic 列表中的某个记录时ActivityDisplayTopic 将被创建并显示给用户ActivityDisplayTopic 直接继承自 ActivityMain主要由 TextView、 EditView 等 Widget 组成向用户显示主题、标题、消息内容等相关信息并且提供编辑、 保存功能。
ActivityPubliher 继承自 Activity当用户在主界面中选择发布消息时将进入发布 界面 ActivityPubliherActivityPubliher 将创建一个新的发布线程发布用户填写的消息。
ActivityPubliher 同时提供了默认主题的下拉列表供用户选择。
当发布线程结束后发布成功 的主题信息将在本地数据库中存储感兴趣的用户可以随时进行查询。
ActivitySubscriber 继 承自 Activity用户在主界面中选择订阅消息时将进入订阅界面订阅界面提供了几种订阅 主题供用户进行选择用户可以选择多个主题进行订阅每订阅一个主题将新建一个订阅 线程除非用户显式取消订阅否则订阅线程将一直存在。
Android 提供了 Runnable 接口以 支持多线程和 J2SE 基本相同。
类 PubTopic 和 SubTopic 都实现了 Runnable 接口其中 PubTopic 封装了发布主题所需的数据及操作而 SubTopic 封装了订阅主题所需的数据及操 作这部分符合 JMS 标准。
JMS API 由 iBus//Mobile 提供主要流程为创建实例、注册 QoS、 初始化 JNDI、查找连接工厂、使用连接工厂创建 JMS 连接、使用 JMS 连接、创建 JMS 会 话、查找主题、创建消息生产者/消费者、创建事件监听器7。
3.2 客户端运行结果 图 7 为发布界面在下拉列表中选择主题之后填写消息标题以及详细的消息内容选 择发布即可将消息发布到 JMS Provider。
图 8 所示为订阅界面用户选择一个标题点击订阅 即可对所选主题进行订阅支持多主题订阅每订阅一个主题将在系统中启动一个新的线程 执行订阅任务。
图 9 为主界面由一个标签容器构成每个标签对应一个主题标签下为消 息列表显示用户所查询的相关消息在消息表项上点击即可进入消息阅读界面。
图 7 消息发布界面 图 8 消息订阅界面 4 小结 图 9 消息主界面 在 JMS 发布订阅系统中发布者和订阅者不需要知道对方的任何信息甚至不需要知 道对方是否存在就可以实现消息的异步传递。
发布者和订阅者之间通过主题交换信息发 布者把信息发布到主题字符串订阅者在主题上注册并接收信息通过这种方式主题字符串 把发布者和订阅者连接起来。
这种模式可以用于多对多的消息传送模式多个发布者可以向 一个主题发布消息多个订阅者可以从一个主题订阅消息。
本文提出了一种在 Android 平台上应用 JMS 实现消息分发系统的方案与传统的新闻 发布技术 RSS 相比本系统中消息的传播不再是单向的而是为用户提供了完全的信息共 享权限所有用户都可以对自己感兴趣的话题进行异步的推送与拉取。
借助于消息网关技术 本设计具有很好的异构网络兼容性支持多种接入方式便于灵活部署。
参考文献 References 1 靳岩姚尚朗. Google Android 开发入门与实战M. 北京人民邮电出版社2009. 2 Eugster PT Felber PA Guerraoui R. The many faces of publish/subscribe. ACM Computing Surveys 2003 352:114-131. 3 韩超梁泉. Android 系统原理及开发要点详解M. 北京电子工业出版社2010. 4 Softwired Inc. Developer’s User Manual for iBus//Mobile Release 6.0 OL. http://www.softwired-inc.com/ins idesoftwired/index.
php 5 Eiko Yoneki Jean Bacon. Gateway: A Message Hub with Store-and-forward Messaging in Mobile Networks Distributed Computing Systems Workshops 2003:348-353. 6 Michael James Rumbaugh. UML 面向对象建模与设计M. 车皓阳 杨眉. 北京人民邮电出版社2006. 7 Mark Richard Richard Monson-Haefel David A Chappell. Java Message Service M. Sebastopol: O’Reilly 2000.