




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/7/21,Proprietary and Confidential Information,2,PLD James.Zhang 7/21/2019,应用软件框架简介,2019/7/21,Proprietary and Confidential Information,3,目的,什么是应用框架 Mocor平台的应用软件框架,2019/7/21,Proprietary and Confidential Information,4,框架(Framework)的定义 支撑或围住其他物体的结构, 尤指用作建筑物之基础的支撑骨架. 术语”框架”对不同的人,含义不同.建筑师用这个词描述建筑物的骨架或结构.软件架构师用这个词描述有助于软件应用开发的一组可重用的设计和代码. 在应用开发领域,无论有没有框架,所有事情照样能做.然而,框架能为应用提供很多好处,采用应用框架方法对应用开发大有裨益.,应用框架,2019/7/21,Proprietary and Confidential Information,5,第一个被广泛应用的框架是模型-视图控制器(MVC), 是一个由施乐公司开发的Smalltalk用户界面框架. 这种使用观察者设计模式的MVC方法已经被很多用户界面系统采用. 著名的用户界面框架有MacApp和MFC. 框架概念并不局限于用户界面框架, 也用于通用应用开发. Sun的Java环境和MS的.Net环境, 不仅提供了新的语言和虚拟机, 还提供了它们自己的框架. 它们都是旨在支持所有业务类型的应用系统的通用框架.,应用框架的历史,2019/7/21,Proprietary and Confidential Information,6,业务应用层表示客户化应用, 由应用开发者负责开发. 应用框架是应用的半成品, 软件架构师开发它. 其中特定领域框架层由针对特定业务领域的专有组件组成. 跨领域框架层由不包含业务领域知识的框架组件组成, 能够被多个不同业务领域的应用共享.,应用框架的分层,2019/7/21,Proprietary and Confidential Information,7,使用应用框架有如下优点 模块化 把应用分割成多个组件或模块. 模块化的开发互不影响, 效率提高. 可重用性 代码的可重用性. 可扩展性 客制化, 开发者可在框架中插入自定义的业务逻辑.,为何使用应用框架,2019/7/21,Proprietary and Confidential Information,8,简单性 框架封装了处理流程的控制逻辑, 对开发者透明. 免去开发者编写协调逻辑之苦. 可维护性 应用框架分层, 最底层包含没有任何业务假设的框架组件, 层次越往上, 其组件依赖的业务假设就越多. 每当需求变化时, 只有业务假设被打破的层中的组件需要被修改和测试.,为何使用应用框架,2019/7/21,Proprietary and Confidential Information,9,通用点 提取应用层的某些重复出现且又没有太多变化的部分, 作为通用点, 封装成框架层的组件. 开发者将引用框架组件实现的通用点, 而不用亲自去开发它们. 扩展点 在框架中安置一个空的占位符, 将来被基于框架之上构建的业务应用填上客制化的实现. 白盒框架 抽象类组成的框架. 开发者需要继承框架中的抽象类来建立一个具体类. 白盒框架使用继承法支持扩展点. 黑盒框架 直接可用的类组成的框架. 开发者通过组合很多组件来达到预期的目的. 黑盒框架借助组合法来支持扩展点. 灰盒框架 同时采用继承法和组合法, 既包含抽象类, 又包含具体类. 设计模式 利用设计模式解决开发应用框架中的一些共性问题. 框架的设计没有银弹, 需要在不同的方法之间权衡, 创造出适合目的的应用框架.,应用框架的开发技术,2019/7/21,Proprietary and Confidential Information,10,NO FREE LUNCH 框架的开发需要额外的代价 框架开发 用户培训 开发应用框架就像在股市投资, 好的投资应该对你的投资目标有利, 而不是看它们今天是否赚钱.,应用框架经济学,2019/7/21,Proprietary and Confidential Information,11,Mocor平台应用软件框架,2019/7/21,Proprietary and Confidential Information,12,APP(MMI) 实现具体的应用功能, 体现给用户界面显示和方便快捷的人机交互操作. 应用实现的基础是MMK提供的消息机制和窗口管理机制, 应用不必关心MMK的内部细节, 只需要关心本模块内的消息回调实现. GUI 人机交互的图形界面实现, 抽象封装了图形操作接口, 包括文字,图形,图像. 一方面应用可以直接调用API实现基本图像的绘制, 也可以利用GUI控件实现标准图形数据的创建,显示,控制和销毁. 控件的实现同样基于MMK. MMK 即MMI Kerenl, 即Mocor平台的应用软件框架. 主要作用是消息派发和窗口管理. 消息派发主要负责派发内部消息和外部按键触笔定时器以及其他task发给MMI的消息. 窗口管理模块负责应用窗口控件的创建,显示,控制和销毁.,Mocor平台应用软件框架,2019/7/21,Proprietary and Confidential Information,13,Application, Applet, Window, Control是MMK中四个重要的概念. 模板模式 MMK这些核心部件的设计使用了设计模式中的模板模式(也叫好莱坞原则,好莱坞演员平时都在家里, 导演拍片时会打电话给演员, 演员不会自己找导演). 应用的各个模块如APP, GUI都依赖于MMK, 等MMK来调用各自的回调函数. 这正是别调用(Call)我, 让我来调用(Call)你.,应用应用程序窗口控件,2019/7/21,Proprietary and Confidential Information,14,Application的概念,MMI的每个应用模块就是Application, 用于注册和处理外部消息. 外部消息可以被多个Application注册,Kernel会依次分发消息给各个Application, 由Application处理。 应用的声明: MMI_APPLICATION_T g_cc_app; 注册外部消息: REG_APP(APP_MN_FDN_UPDATE_CNF, APP_MN_DEACTIVATE_PDP_CONTEXT_IND, &g_cc_app) 消息处理函数CC_HandlePsMsg, 消息处理函数的设计就是之前提到的框架中的扩展点. 需要注册外部消息的应用:g_main_app, g_cc_app, g_sms_app,2019/7/21,Proprietary and Confidential Information,15,Applet的概念,Applet:可看做windows系统上应用程序的概念. 可以包含一个或多个窗口, 也可以没有窗口. 窗口间的数据交换可以借助Applet来完成. Applet的消息处理函数, 用来处理送给Applet的各种消息, 包括Applet的启动销毁, 定时器和其他指定发给Applet的消息. Applet还要管理其所属的窗口的生命周期.,2019/7/21,Proprietary and Confidential Information,16,Applet的重要属性,句柄 句柄是用来唯一标识应用程序窗口控件运行时实例的ID, 是动态生成的. GUID GUID是用来唯一标识接口类的ID, 是由用户指定的. 相同GUID的应用程序可以有多个实例, 类似于PC上可以开多个IE, 多个QQ. 消息处理函数 应用中包含的窗口列表,2019/7/21,Proprietary and Confidential Information,17,Window的概念,Window:窗口是最终用户可以直接看到的一个个实在的屏幕,是直接和用户打交道的,专门处理用户的按键输入等操作,并且将最终用户输入后的处理结果显示在屏幕上。 窗口的消息处理函数,用来处理送给窗口的各种消息,包括按键,定时器消息等等。 窗口还要管理其所属的控件,将部分消息交给控件处理。,2019/7/21,Proprietary and Confidential Information,18,Window的重要属性,句柄 静态ID 消息处理函数 窗口中包含的控件列表 当前active的控件 优先级 状态,是否打开,是否获得focus Title,Softkey,2019/7/21,Proprietary and Confidential Information,19,Control的概念,Control:控件,可以完成某种特定功能,例如:编辑功能、文本显示功能、动画功能等。 使用控件可以使开发人员专注于应用的功能开发,而不是过多考虑界面的开发。 可添加新控件,更改现有控件风格,2019/7/21,Proprietary and Confidential Information,20,Control的重要属性,句柄 静态ID GUID 父窗口 消息处理函数 创建销毁等回调函数,2019/7/21,Proprietary and Confidential Information,21,MMK消息派发,MMI跑在APP_Task, 是一个while(1)的死循环. APP_Task先处理内部消息, 再处理外部消息. 内部消息派发给窗口,控件应用程序. 外部消息派发给应用. 处理完消息之后, Kernel根据屏幕是否置脏, 统一进行刷屏,2019/7/21,Proprietary and Confidential Information,22,MMK消息派发,内部消息分别根据目标句柄的类型, 派发给应用程序, 窗口和控件. 按键消息, 会优先派发给窗口的Active控件, 再派发给窗口.,2019/7/21,Proprietary and Confidential Information,23,消息分类,根据消息的接收情况来划分,消息分为两类: 外部消息:主要包括PS消息、key消息、Timer消息和一些由其它task发送过来的消息; 内部消息:MMI模块内部发送、接收和处理的消息,不与其它模块发生任何关系. 注:在App_Task的消息循环当中,总是处理完内部消息之后再处理外部,2019/7/21,Proprietary and Confidential Information,24,外部消息,外部消息可分为以下几类 系统消息:主要为PS消息和其它一些task发送给mmi的消息,只有Application在注册后才能够处理这条消息。一条系统消息可以被多个Application注册和处理。 按键消息:直接被发送给处于Focus状态的窗口进行处理。 定时器消息:由于定时器时间到所产生的消息,由定时器的owner进行处理, Applet, Window, Control都可以启动timer。,2019/7/21,Proprietary and Confidential Information,25,内部消息,窗口相关消息,包括MSG_OPEN_WINDOW, MSG_CLOSE_WINDOW, MSG_LOSE_FOCUS, MSG_GET_FOCUS, MSG_FULL_PAINT 控件相关消息,包括MSG_CTL_OPEN,MSG_CTL_CLOSE,MSG_CTL_PAINT MMI各个模块自己定义的消息,2019/7/21,Proprietary and Confidential Information,26,内部消息处理,不需要应用模块进行注册 由Window,Control处理 消息队列由MMI Kernel维护 MMK的消息定义在mmk_msg.h中 用户自定义消息在mmi_appmsg.h,2019/7/21,Proprietary and Confidential Information,27,消息发送,异步方式,用MMK_PostMsg()函数来实现。 将消息发送到内部消息队列中,马上返回。 同步方式,用MMK_SendMsg()函数来实现。 消息发送给指定窗口或控件,处理完后才会返回。,2019/7/21,Proprietary and Confidential Information,28,按键消息处理,按键分为五种状态, PRESS, RELEASE, LONG_PRESS, LONG_RELEASE, REPEAT PRESS和RELEASE是对应的. LONG_PRESS和REPEAT需要开启定时器. 按键消息会优先派发给Focus窗口的Active控件处理,2019/7/21,Proprietary and Confidential Information,29,触笔消息处理,触笔分为四种状态, PRESS_DOWN, PRESS_UP, PRESS_MOVE, PRESS_LONG DOWN和UP是对应的. LONG需要开启定时器. PRESS_DOWN会改变Focus窗口的Active控件,2019/7/21,Proprietary and Confidential Information,30,定时器消息处理,定时器按使用范围可分为系统定时器和用户定时器. 系统定时器的ID是固定的, 用户定时器的ID是动态生成的. 定时器按生命周期可分为一次性定时器和周期定时器. 一次性定时器到期自动销毁, 周期定时器需要用户手动销毁.,2019/7/21,Proprietary and Confidential Information,31,同一个屏幕上会存在多个窗口, 必然导致窗口覆盖的问题. 最早创建的窗口位于Zorder的最底端, 后创建的窗口根据优先级依次向上叠加, 最后创建的且优先级较高的窗口位于Zorder的最顶端. 用户可以通过切换窗口焦点来改变Zorder, 但优先级低的窗口无法覆盖优先级高的窗口. 系统刷新是从最靠近顶端的全屏非透明窗口开始, 依次向上绘制屏幕.,窗口Zorder序,2019/7/21,Proprietary and Confidential Information,32,CAF简介,4. 新产品介绍,CAF = COM APPLICATION FRAMEWORK 以函数声明的方式向平台和第三方应用提供二进制兼容的接口, 支持从文件系统加载并运行COM组件, 为封闭式平台进化为开放式平台打通了道路, 是MMK的重要扩展. 桥接模式 将抽象部分和它的实现部分解耦, 使它们可以独立的变化, 即接口和实现分离. 客户类使用接口来访问实现类中的具体方法, 实现类的变化并不影响客户类, 因为就客户类而言, 它仅仅使用接口层.,2019/7/21,Proprietary and Confidential Information,33,CAF简介,CAF开放的接口都是以虚表的形式。 虚表中的函数指针指向真正的实际函数地址, 这样就解决了动态链接问题, 做到了接口和实现分离.,2019/7/21,Proprietary and Confidential Information,34,CAF简介,4. 新产品介绍,类厂模式 定义一个用于创建对象的接口,让子
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广东省茂名市事业单位工勤技能考试题库及答案
- 2025年度食品安全员考试题库附答案
- 2025年护路员笔试护栏巡查要点书
- 2025年军队文职法学笔试高频考点复习
- 2025年防空防化面试题预测分析
- 2025年城市运行面试重点题解析
- 2025年宠物瑜伽师中级实操考试指南与模拟题
- 产品设计开发过程文件归档与备份模板
- 淘宝店买课件被处罚
- 广东执法考试题库及答案
- 2025广东广州市从化区社区专职人员招聘33人笔试参考题库附答案解析
- 建材买卖(橱柜订购类)合同协议书范本
- 新概念第一册课文讲解
- 【里斯】年轻一代新能源汽车消费洞察与预测 -新物种 新理念 新趋势(2024-2025)
- 2025年小学英语教师业务理论考试试题及答案
- 中小学基孔肯雅热应急防控预案
- 港口无人驾驶行业深度报告:奇点已至蓝海启航
- 纪法考试题库及答案解析
- 免疫复合物沉积-洞察及研究
- 北师大版五年级下册数学口算题题库1200道带答案可打印
- 托管老师岗前培训
评论
0/150
提交评论