版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Symbian OS/C+移动应用开发讲义何 锐 张锦锋牛建伟Niujianwei北京航空航天大学计算机学院分布与移动计算实验室1主要内容Symbian OS 概述 (1上)Symbian SDK及其开发环境 (1上)Symbian软件开发概述 (1上)内存管理 (1下)Descriptors (2上)动态数组 (2上)活动对象 (2下)2北航分布与移动计算实验室主要内容(续)简单GUI编程 (3上)资源的使用 (3上)对话框 (3下)视图及控件 (3下)中文化 (4上)多视图 (4上)文件及流操作(4下)MMF入门 (5上)总结与考试 ( 5下 )3北航分布与移动计算实验室Symbian O
2、S 概述4北航分布与移动计算实验室内容Symbian OS演变历史关键特点其它相关操作系统特点基础概念组件结构5北航分布与移动计算实验室Symbian OS6北航分布与移动计算实验室Symbian OS针对PDA及智能手机的,能够提供良好的软实时的操作系统与之竞争的有Windows Mobile、PalmOS以及Linux,BrewSymbian OS针对如下特点进行了优化低功耗(电池供电)小型设备长久运行、关键应用Symbian OS解决的问题嵌入式软件移动计算电话其他基于ROM的应用程序7北航分布与移动计算实验室关键特点主要特点:基于ROM针对电池供电健壮性好抢先式多任务微内核基于组件完全
3、面向对象因此:可靠性好不会丢失用户数据8北航分布与移动计算实验室通用技术9北航分布与移动计算实验室当前的产品(S60平台)Nokia N-GageNokia 6600Nokia 6630Nokia 6670Siemens Sx1Panasonic X700Nokia 7650Nokia 761010北航分布与移动计算实验室当前的产品(S80和S90)Nokia 92xx communicatorsNokia 9500/9300 communicatorsNokia 7700Nokia 771011北航分布与移动计算实验室当前的产品(UIQ)Motolora A1000P908P91012北航分
4、布与移动计算实验室13北航分布与移动计算实验室竞争者平台PalmWindows MobileRIM (BlackBerry)Linux移动技术MIDP(J2ME)WAPLinuxSim Toolkit.NET (C#)14北航分布与移动计算实验室Windows Mobile最初是为比较大的设备设计的操作系统优点:配置高,功能强缺点:耗电大,硬件成本高针对不同的设备族Pocket PCSmart Phone封闭的环境MS提倡私有开发标准很多的开发人员易于使用用户界面友好15北航分布与移动计算实验室PalmOS比SymbianOS还要普及一些尤其是美国市场表现在退步(Pocket PC)目前Pal
5、mOS销量不好16/32位操作系统第三方软件多较多的开发人员16北航分布与移动计算实验室LinuxLinux在C/S模式下表现很好为Intel架构的个人电脑设计性能和健壮性优于Windows在服务器端有良好表现比Symbian OS更开放很容易定制可以直接得到RTOS Linux大量专家级的开发者免费使用17北航分布与移动计算实验室GEOSGEOS是Nokia等公司内部使用的一个中低端手机操作系统,目前没有被广泛使用Nokia准备从GEOS过渡到Symbian平台18北航分布与移动计算实验室Symbian OS发展历史1984 第一个版本Psion Organizer II8位OS支持汇编语言
6、和OPL(Organizer Programming Language)1991 Psion Series 316位Organizer(SIBO)OS内核为EPOC应用程序和引擎分离X86销售了1.5M SIBO机器19北航分布与移动计算实验室Symbian OS发展历史(续)1994发展称为32位可移植的操作系统1996 成立了“Psion软件”公司1997 第一个发布了Symbian OS版本1998 Symbian公司成立:Ericsson,Motorola,Nokia,Psion1999 Panasonic公司成为股东销售2M Symbian平台设备20北航分布与移动计算实验室Symb
7、ian OS发展历史(续)2000 Symbian OS授权Sony和Sanyo发布了世界上第一款Symbian智能手机, Ericsson R3802001许可证授权Siemens和Fujitsu发布Nokia 92xx第一款Series 60 手机 7650Symbian OS v6.121北航分布与移动计算实验室Symbian OS发展历史(续)2002Siemens和Sony Ericsson变为新股东许可证授权SamsungSymbian OS v7.0发布Sony Ericsson发布P8002003Symbian OS v7.0s发布Series 90, UIQ设备P908发布S
8、amsung变为股东2003前3季度销售 4M Symbian手机22北航分布与移动计算实验室Symbian OS发展历史(续)2004发展势头迅猛,前景看好Nokia 9500发布LG和 Arima获得许可证Nokia购买了Psion 的股权Symbian OS v8.0发布多个新新设备发布MotorolaPanasonic23北航分布与移动计算实验室Symbian OS授权使用者24北航分布与移动计算实验室Symbian OS股份分配25北航分布与移动计算实验室基础概念线程一个线程是执行的单元。同一个进程的线程共享地址空间。调度器(schceduler)负责对线程(而不是进程)进行调度进程
9、内存保护的单元。一个进程不能访问其他进程的内存空间。一个进程有一个或多个线程抢先式多任务线程根据它们的优先级进行调度。优先级高的线程能够抢先优先级低的线程的CPU资源26北航分布与移动计算实验室内存地址空间分配图27北航分布与移动计算实验室基础概念上下文切换当调度器在不同的线程之间进行切换时,就需要进行上下文切换。将导致内存表、寄存器内容改变根据线程是否属于同一个进程而耗时不同活动对象Symbian OS用来处理异步方法调用的特殊对象使得进行合作的多个线程能够更加有效的利用资源堆/栈线程使用的内存空间堆必须显式的申请和释放栈空间由OS负责管理28北航分布与移动计算实验室基础概念LeaveSym
10、bian OS的错误处理机制与Trap Harness一起使用与标准C+中的catch/throw机制类似Panic致命错误退出应用程序Panics要么由OS触发,要么由一个出现了严重错误的用户线程触发,如栈溢出29北航分布与移动计算实验室Symbian OS体系结构Symbian OS30北航分布与移动计算实验室组件构架31北航分布与移动计算实验室应用程序UI对于用户而言,Symbian OS就是一系列的视图Symbian应用程序UI包括:一个App UI对象,用户处理用户交互命令;由各种图形UI元素(Controls)组成的应用程序视图 (View);与设备无关的视图,负责将应用程序数据显
11、示在控件中或打印出来。(可选)32北航分布与移动计算实验室例子:Agenda视图UIQS60S80S9033北航分布与移动计算实验室App UI由GUI控件构造GUI系统Uikon Core + Qikon on UIQ, orAvkon on S60, orCkon on S80 and S9034北航分布与移动计算实验室UI例子TechViewR380s35北航分布与移动计算实验室控件例子TechView屏幕快照36北航分布与移动计算实验室UI与图形Qi/Av/Ckon提供了UI参考实现的某些功能标准的EIKON是标准控件的工具集CONE: CONtrol EnvironmentAppar
12、c: Application Architecture Component,定义了应用程序结构37北航分布与移动计算实验室GUI由图形库支持图形基础图形设备接口(GDI)设备无关UI图形打印图形所见即所得字体、缩放、24位色图形组件BITGDI:快速粘贴、缩放、旋转等Window Server共享屏幕键盘与指针保持所有应用程序的轨迹发送重画请求38北航分布与移动计算实验室数据管理绝大多数的应用程序都具有分离的UI和引擎引擎能够理解程序的核心算法和数据存储而不知道数据的图形显示及UISymbian支持相同的引擎与不同的UI配合使用客户/服务器的应用程序模式使得UI和引擎能够更好地分离39北航分布
13、与移动计算实验室支持库能够被应用程序直接使用的复杂引擎Rich Text(ETEXT)文件存储工具(STORE)数据库工具(DBMS)音频基本程序框架库(BAFL)40北航分布与移动计算实验室Base提供了访问硬件的接口Symbian Base主要包含了4个部分Symbian Base为其他所有组件提供了基础服务和编程框架41北航分布与移动计算实验室Symbian Base用户可见的部分User LibraryFile ServerKernel负责管理设备资源:CPU,内存,线程调度Device Drivers负责驱动硬件设备Device Drivers的代码包括两个部分,主要的部分在内核方,
14、API部分在用户方42北航分布与移动计算实验室E32映象E32是Symbian OS的核心部分Kernel Executive和User Library可以看作是一个函数集合(库);Kernel Executive运行在特权态(privileged processor state)Kernel server也是处于特权态的线程User Processes是应用程序和系统服务器43北航分布与移动计算实验室通信通信是Symbian组件联系和消息传递的基础。提供了通信协议中通用的操作接口,如接收数据、发送数据、建立连接、配置网络等。Socket是通信的端点,Symbian提供了类似Berkley s
15、ocket的socket APISymbian还提供了例如主机名解析、服务解析、协议信息等访问方法可用的协议包括IrDA,PPP,SLIP,GPRS,Bluetooth,TCP/IP以及RS232通常通信是在应用程序引擎层访问的服务器:C32,ESOCK,ETEL,NETDIAL44北航分布与移动计算实验室移植到新设备如果将系统应用到同一个系列的其他产品(如同属于S60),几乎不用修改如果移植到不同的系列(S60-UIQ等),则还要修改GUI以及应用程序UI及视图如果新的设备包含了新的硬件,则可能需要修改Base部分跨系列Qikon: UIQAvkon:S60Ckon:S80/9045北航分布
16、与移动计算实验室JavaSymbian OS支持MIDP(CLDC1.1,MIDP2.0)及PersonalJava46北航分布与移动计算实验室Java 优缺点在2006年以前所有智能手机都支持广泛运行在各种手机上一次编写,多处运行性能和功能一直在提高性能问题依赖虚拟机47北航分布与移动计算实验室Java on Symbian OS第一个实现,1999,ER5JDK 1.1.4Personal Java, 2000, Symbian OS v6.0内存占用少提供了Javaphone APIJ2ME,MIDP1.0, 2002, Symbian OS v7.0J2SE功能的一个子集占用内存较少提
17、供了对MIDlet的支持MIDP2.0, Symbian OS V7.0sUI 功能增强安全蓝牙等等.48北航分布与移动计算实验室问题?49北航分布与移动计算实验室20 minutes break50北航分布与移动计算实验室Symbian SDK及其开发环境51北航分布与移动计算实验室内容Symbian SDK简介常用命令主要开发工具获取帮助52北航分布与移动计算实验室开发环境的搭建安装SDK到Nokia论坛下载最新的Series 60 SDK for Symbian OS到 网站下载最新的Active Perl Script 安装程序 到http:/en/download/manual.js
18、p 下载最新的J2RE 安装SDK,推荐为Symbian开发单独建一个目录检查环境变量设定EPOCROOT = 安装目录(去盘符)在系统PATH中加入 epoc32tools目录以及epoc32gccbin目录就可以了53北航分布与移动计算实验室Symbian SDK的获得可以从诺基亚网站下载/main/0,6566,034-4,00.html选择Series 60 SDKs for Symbian OS我们使用的是 S60 SDK 2.0 for VC54北航分布与移动计算实验室VC平台安装注意事项Path:C:Program FilesMicrosoft Visual StudioVC98
19、Bin; C:Program FilesMicrosoft Visual StudioCommonMSDev98Bin55北航分布与移动计算实验室软件安装安装Series 60 SDK for VC6软件56北航分布与移动计算实验室SDK目录结构57北航分布与移动计算实验室epoc32子目录58北航分布与移动计算实验室SDK工具模拟器用于运行,调试,测试Symbian程序便于程序调试和错误追踪并不是所有功能都能模拟,如兰牙通信示例:Start|Programs|Symbian 7.0s SDKs|Seriese 60 2.1| Enumlator(Release)C:epoc wins -re
20、l59北航分布与移动计算实验室文件&程序在Symbian手机中,z:对应ROM,c:对应RAM(8MB),d:对应存储棒在SDK中,c:对应的目录是epoc32winscd:对应于目录是epoc32winsd z:对应的目录是epoc32releasewinsurelz或epoc32releasewinsudebz60北航分布与移动计算实验室磁盘目录每个磁盘下一般都具有如下标准目录system 包含所有系统文件systemApps 所有应用程序systemAppsappnameappname.appsystemLibs 共享.dlldocuments 用户文件61北航分布与移动计算实验室SDK
21、 帮助系统62北航分布与移动计算实验室其他工具Bitmap Converter BMCONVResource compiler EPOCRCAIF Builder(.rss-.aif)Menu BuilderMeadApplication Installer makesisCS Help Compiler(.hlp)S60 AppWizard63北航分布与移动计算实验室目标二进制支持的平台WINS(单进程)VC6WINSCWCW_IDEARM4ARMITHUMB版本udeburel64北航分布与移动计算实验室ABIs即Application Binary InterfacesSymbian程序
22、针对ARM平台可以按照三个模式build:ARM4,ARMI,THUMB电话制造商指定使用的ABI通常是THUMBARMI代码能够同时与THUMB和ARM4交互65北航分布与移动计算实验室Bldmake & abld工具使用bldmake和abld工具根据描述文件bld.inf和.mmp文件将源文件build成指定平台和版本的二进制代码66北航分布与移动计算实验室使用模拟器开发C是可以被编译成任何指令集二进制文件的独立于平台的语言。67北航分布与移动计算实验室Build工具与IDEs通常是先用命令行创建和配置项目,然后使用IDE;也可以使用AppWizard我们使用MS Visual Stud
23、io 6.0其他的IDE工具包括:Metrowerks的CodeWarriorBorland C+ builder (mobile)Eclipse68北航分布与移动计算实验室配置VC把Symbian7.0Series60Series60Tools Application Wizard目录下的 AvkonAppWiz.awx和AVKONAPPWIZ.HLP文件拷贝到vc6的模板目录VSROOT Common MSDev98 Template 打开VC,就可以在新建工程对话框中看见S60 Symbian开发向导了69北航分布与移动计算实验室配置VC安装工具条Epoctoolbar将EpocTool
24、s.dll 拷贝到CommonMSDev98Addins启动VC6选择 Tools Customize from the menu bar点击 Add-ins and Macro Files tab选中 EPOC Toolbar Add-in点击 Close buttonEPOC 工具条应该出现菜单栏上70北航分布与移动计算实验室使用VC6也可以直接使用S60 SDK提供的VC6的AppWizard演示创建VC的项目文件(现成例子)bldmake bldfilesabld makefile vc6演示(HelloWorld)71北航分布与移动计算实验室使用VC使用VC Appwizard72北
25、航分布与移动计算实验室使用VC使用现有的例子进入C:Symbian7.0sSeries60_v20Series60Exhelloworldbasicgroup运行 bldmake bldfiles运行 abld makefile vc6用VC打开EPOC32BUILDSYMBIAN7.0SSERIES60_V20SERIES60EXHELLOWORLDBASICGROUPHELLOWORLDBASICWINS配置project-setting-executable for debug session为Epoc32releasewinsudebepoc.exe编译运行例子尝试跟踪例子73北航分布
26、与移动计算实验室其他平台Build演示WINS (Windows 单进程命令行)bldmake bldfilesabld build wins udebARMIbldmake bldfilesabld build armi urelTHUMBbldmake bldfilesabld build thumb urel演示74北航分布与移动计算实验室获取例子安装SDK后,可以学习例子程序%EPOCROOT%Examples%EPOCROOT%Series60Ex%EPOCROOT%SymbianSampleCode首先学习ExamplesBasics中的例子75北航分布与移动计算实验室获取帮助安装
27、SDK后的Help文件Symbian 开发者论坛Nokia开发者论坛www.NewLC.com76北航分布与移动计算实验室TitleAuthorPublisherDateProgramming Psion ComputersLeigh EdwardsEMCC?Professional Symbian ProgrammingMartin Tasker, Jonathan Allin, Jonathan Dixon, MarkWrox Press2000.02Symbian OS Communications ProgrammingMichael J JippingSymbian Press200
28、2.06Programming for the Series 60 Platform and Symbian OSDigiaSymbian Press2002.12Symbian OS C+ for Mobile PhonesRichard HarrisonWiley, John & Sons2003.05Developing Series 60 ApplicationsLeigh Edwards, Richard Barker, and the Staff ofAddison-Wesley Professional2004.03Symbian OS C+ for Mobile Phones
29、Volume 1Richard HarrisonSymbian Press2004.04Symbian OS C+ for Mobile Phones Volume 2Richard HarrisonSymbian Press2004.08Symbian OS C+ 手机应用开发Richard Harrison著,周良忠 译2004.09Symbian OS ExplainedJo StichburySymbian Press2004.12PC Connectivity Applications for Symbian OSlan McDoWallSymbian Press2004.12Sym
30、bian书籍77北航分布与移动计算实验室问题?78北航分布与移动计算实验室完成练习1练习1:Symbian基本命令79北航分布与移动计算实验室Symbian软件开发概述80北航分布与移动计算实验室使用bldmake & abld81北航分布与移动计算实验室使用bldmake Bldmake为工程创建abldcd myprojectgroupBldmake bldfiles使用abld创建组件或者工程文件Abld build 或者Abld build wins udeb82北航分布与移动计算实验室Bld.inf 文件组件定义文件PRJ_MMPFILESHelloWorld.mmp与MMP在同一个
31、目录83北航分布与移动计算实验室编译过程84北航分布与移动计算实验室exe程序的.mmp文件85北航分布与移动计算实验室UIDs每个应用程序都具有唯一的UIDsUID是一个具有唯一性的32位数字Symbian用UIDs(而不是扩展名)来标识不同的文件类型在项目定义文件(.mmp)中指定UIDs86北航分布与移动计算实验室UIDs87北航分布与移动计算实验室UID1文件类型指示器指定了文件的类型.EXE(UID1=KExecutableImageUid).DLL (UID1=KDynamicLibraryUid)存储文件或者其他格式的文件88北航分布与移动计算实验室UID2子类指示器UID2指明
32、了不同类型的DLL或者数据文件EXE程序不需要UID2对于一个应用程序而言UID2可以三种之一KUidAppKUidAppDllDocKuidAppInfoFileUID2定义在APADEF.H和APGICHFL.H中89北航分布与移动计算实验室UID3代码指示器应用程序DLL (.app)唯一性的标识应用程序文档或数据文件将其关联到特定的执行文件和图标对于EXE而言,不需要UID2或UID3对于一个应用程序而言,其dll文件、文档以及AIF文件的UID3都是一样的。90北航分布与移动计算实验室UIDs的分配从Symbian开发者网络可以得到发送email到uid指明需要的UIDs的个数指明应
33、用程序或者项目名称0 x01000000到0 x0FFFFFFF之间的UIDs用于实验通常最多能够申请10个UIDs,除非是获得了Symbian授权的公司。91北航分布与移动计算实验室mmp文件每个项目都具有一个项目定义文件,即mmp文件,mmp文件包含了如下信息目标名称目标类型UID源文件目录源文件列表用户包含文件目录系统包含文件目录库文件调试库文件92北航分布与移动计算实验室建立dll93北航分布与移动计算实验室dll 的mmp文件实例UID2指明了静态接口DLLDll指明了UID1的值94北航分布与移动计算实验室编译CreateStaticDll例如,创建一个应用程序引擎.dll步骤95
34、北航分布与移动计算实验室Build 一个 .app96北航分布与移动计算实验室一个app的mmp文件97北航分布与移动计算实验室编译HelloWorldGUI应用程序.app步骤98北航分布与移动计算实验室GUI资源文件资源文件描述了如菜单、对话框、工具条等信息包含了资源的索引信息由文本资源文件.rss经过资源编译器(rcomp.exe) 编译后产生资源编译器可以由abld.bat显式的调用,如果使用IDE,则将IDE自动调用99北航分布与移动计算实验室资源编译器输出文件二进制资源文件(.rsc,.r01,.r02,).rsc用于缺省语言版本,而.r01则表示英国英语版本,.r02是法语版本每
35、个资源由资源头文件.rsg中的一个索引标识.rsg为资源头文件,它包含了一系列的#define语句,定义了资源文件中的每个资源。索引便于更有效的查找资源一个资源文件中可以有1到4095个资源100北航分布与移动计算实验室问题?101北航分布与移动计算实验室应用程序开发102北航分布与移动计算实验室Symbian GT到SDK的发展过程103北航分布与移动计算实验室Symbian OS的程序104北航分布与移动计算实验室Exe & DLLSymbian中的可执行程序分为两种,EXE和DLLEXE,具有一个主入口E32Main()的程序,属于独立的进程,常做服务器。DLL,程序代码库,可以有多个入
36、口,并没有独立的进程。系统通常将DLL代码加载到当前thread上下文中。105北航分布与移动计算实验室EXEs与DLLs的区别EXEs用于图形无界面应用程序或者服务器单入口代码独立运行在PC上是独立的窗口DLLs用于GUI应用程序多入口代码可共享在没有被使用时可以被卸载可以作用共享库或者服务提供库(.app)(provider library)106北航分布与移动计算实验室DLL的两种类型107北航分布与移动计算实验室DLL的两种类型静态接口DLL (static interface dll)共享库(Shared library DLL)提供固定的API,可以为其他程序调用。共享库DLL在程
37、序需要时加载调用。共享库DLL使用后缀名.dll多态接口DLL(polymorphic interface dll)提供库(provider library)实现了一个抽象API,后缀名通常不是.dll,而是.prn, .prt, .app。多态DLL通常具有单一的入口,由需要它的程序显式的加载108北航分布与移动计算实验室静态接口DLL109北航分布与移动计算实验室多态接口DLL由于多态接口DLL只实现了预先定义的抽象方法,这使得不同服务能够通过相同的接口被启动。110北航分布与移动计算实验室使用DLLs的优点静态接口DLL高效使用内存-只加载一次二进制代码重用运行时加载,减少了执行代码大小
38、多态接口DLL相同接口的多个实现.app DLL支持文档嵌入二者封装好111北航分布与移动计算实验室连接和装载112北航分布与移动计算实验室Symbian编码规范目的便于阅读理解和维护便于检查,减少出错概率有助于交流维护Symbian C编程习惯基本准则遵循传统C规范有具有自己特色习惯决定成败113北航分布与移动计算实验室Symbian编码规范通常类和函数的第一个字母大写所有单词连接在一起除了宏和资源标识之外,避免使用下划线 _例如void TObject:PrepareForCommit();class CGlobalText;114北航分布与移动计算实验室Symbian编码规范自动变量(局
39、部变量)第一个字母小写需要时才声明自动变量(不要象C语言那样,在方法开头就声明所有变量)永远不要在同一行初始化多个变量全局变量不鼓励使用全局变量大写字母开头非常量的全局数据在DLL中是不支持的;最好使用线程本地存储(T.L.S.)115北航分布与移动计算实验室Symbian编码规范宏所有字母大写用下划线分隔单词IMPORT_C,EXPORT_C,_TEST_INVARIANT指针和引用类型*或&放在类型旁边,而不是变量名旁边 TText* data; void TDemo:Append(const TDesC& aData);116北航分布与移动计算实验室Symbian编码规范类名类名通常只能
40、以C,R,T,M开头结构用T开头静态类没有前缀字母驱动类用D开头例如Class CBase;Class TTypefaceInfo;Class RFont;Class MLaydoc;Class User; /静态类117北航分布与移动计算实验室Symbian编码规范方法名通用规则有效Setters通常是SetThing()Getters通常是Thing(),(如果该方法返回数据项的话)Void SetOffset(TInt aOffset)TInt Offset() const;TInt offset = Offset();“Get”用于获取引用TCharFormat format;GetC
41、harFormat(format);118北航分布与移动计算实验室Symbian编码规范方法名(续)以L结尾的方法表示可能Leave以C结尾的方法表示其中将数据项放入了cleanup stack中以D结尾的方法表示其中的对象将被销毁例如CStoreMap* map = CStoreMap:NewLC();119北航分布与移动计算实验室Symbian编码规范成员变量以i开头例如class TObject TType iType; Tint iElemementOffset; TPtrC iComponentValue; 120北航分布与移动计算实验室Symbian编码规范方法变量(形式参数)以a
42、开头在元音前也不使用an例如void TObject:TObject(TType aType,TInt aElementOffset);最好使用方法重载,而不是缺省参数,这样可读性好,并且更加高效121北航分布与移动计算实验室Symbian编码规范常数K开头单词开头大写例如const TInt KMaxNameLength = 0 x20;const TUid KEditableTextUid=268435548;122北航分布与移动计算实验室Symbian编码规范枚举应当被包含在相应的类中不要全局命名空间必须用一个有意义并且无歧义的名字T开头每个枚举成员E开头特定类中的常量可以实现成枚举型,
43、这种情况下,可以使用K123北航分布与移动计算实验室Symbian中的类程序设计中常用的四种类:T-,C-,M-,R-类必须具有清晰的角色,而不是简单的方法与 数据的集合每个类一个头文件头文件的布局#include filesfriend classes;public, protected, private methods;private, protected, public data;124北航分布与移动计算实验室基本类T类属于数值类型,能够存在于栈中不需要显式的赋值及拷贝构造操作符,而是使用逐位复制不需要显式的析构函数125北航分布与移动计算实验室基本类C类分配在堆上从CBase派生的类具
44、有构造函数和析构函数传递时不能复制对象,只能使用引用或指针126北航分布与移动计算实验室基本类M类表示混合接口类这种类通常只定义成员方法,而不实现它们,也没有成员变量C类也可用从M类派生,从而实现M类中定义的方法M类没有构造函数,也没有析构函数常用于定义回调函数等可用于多重继承127北航分布与移动计算实验室基本类R类表示资源类通常有真正资源的句柄不同R类句柄的含义可以完全不同R类对象可以逐位拷贝没有明确的构造函数、析构函数、拷贝构造函数以及赋值函数通常利用open()方法来打开一个R类,而用close()关闭之Create(), Destroy()Allocate(), Free()在R类的关
45、闭函数中,通常需要释放占用的资源128北航分布与移动计算实验室基本类静态类静态类不用实例化没有前缀通常是不同静态实用函数的封装如User129北航分布与移动计算实验室OO设计帮助设计UML类图描述模式设计UML简介结构块 事物(4种)结构事物(7种) 行为事物 分组事物 注释事物关系(4种)图 (9种)运行规则公共约束130北航分布与移动计算实验室UML类图示例131北航分布与移动计算实验室GUI应用程序框架132北航分布与移动计算实验室问题?133北航分布与移动计算实验室完成2练习2:Symbian开发环境熟悉134北航分布与移动计算实验室内存管理135北航分布与移动计算实验室重要性本来内存
46、就少系统运行时间会很长,极少重启内核、服务器以及一些应用程序运行几年即使电源关闭,也需要保持某些应用的状态少量的内存泄漏经过积累也会造成灾难性的后果编写的程序必须是没有内存泄漏的136北航分布与移动计算实验室因此所有分配的堆内存必须至少有一个指针关联(即使出现内存不足的情况)所有堆内存必须在使用完以后尽快释放137北航分布与移动计算实验室独特机制Symbian OS采用不同于其他任何平台的独特机制Trap harness (陷阱套) 执行代码Cleanup stack (清除栈)Two phase construction (两阶段构造)复合对象必须熟悉上述三个机制,以保证程序是内存安全的13
47、8北航分布与移动计算实验室示例使用了3种机制139北航分布与移动计算实验室栈与堆对象栈中的对象能够被系统自动删除堆中的对象必须由程序员显式的删除栈中的指针可以指向堆空间140北航分布与移动计算实验室内存泄漏分配在堆中的对象,不再有指针变量引用(孤儿对象),从而无法释放该内存,就形成了内存泄漏。丢失该对象的地址,无法删除141北航分布与移动计算实验室发生异常时Leave142北航分布与移动计算实验室捕捉异常异常通常是运行时因为缺少某种资源而引发的错误:例如内存不足或者通信端口不可用异常与程序错误的区别:后者是可以通过修改程序而消除掉的,但是要确保程序不会产生异常几乎是不可能的程序发生异常时Lea
48、ve,会被上层调用中的TRAP 捕捉143北航分布与移动计算实验室TRAP Harness宏如果异常时Leave,将会返回到最近的一个TRAP Harness两个宏TRAP与TRAPD后者不需要程序员自己错误参数在程序的最开始处使用TRAPTRAP Harness要少用,尤其要避免过多嵌套144北航分布与移动计算实验室New(ELeave)属于c+的操作符重载任何类都可以使用若没有足够内存空间的话,将调用User:Leave()以下二者相当145北航分布与移动计算实验室TRAP与Leave提示将95的错误上交给系统处理,不要自己处理如果不是自己处理所有错误信息,则将错误用User:Leave(
49、)或User:LeaveIfError()上传TRAP的代价很高,永远不要连续使用多个TRAP,而是让方法Leave,从而将错误交给调用者处理记住使用new(ELeave)而不是new146北航分布与移动计算实验室Cleanup Stack清除栈用来保存分配在堆上的对象指针一旦出现异常,系统能够根据清除栈释放出错程序在堆中分配的空间,从而避免了内存泄漏147北航分布与移动计算实验室Cleanup Stack对象分配失败148北航分布与移动计算实验室Cleanup Stack使用场合在一个可能Leave的函数中产生的,栈上指向C对象的自动变量指针要Push到清除栈中。一旦出现了异常,TRAP h
50、arness将调用PopAndDestropy()来清空清除栈上所有从调用TRAP时压进去的变量,并释放相应的堆空间。当不会出现Leave时,需要将对象指针从清除栈中弹出。当复合对象的成员变量指向一个对象时,由该复合对象的析构函数负责删除该对象。149北航分布与移动计算实验室看看弹出了哪些对象150北航分布与移动计算实验室声明Clean Stack每个应用程序都有自己的清除栈控制台程序(.exe)需要在E32Main中声明而GUI程序则由CONE创建(因此不需要我们自己创建)151北航分布与移动计算实验室注意类的成员变量不用放在清除栈中否则会造成多次删除类的析构函数中删除一次在退出清除栈时删除
51、一次152北航分布与移动计算实验室两阶段构造例子第一阶段构造第二阶段构造153北航分布与移动计算实验室两阶段构造第一阶段就是c+的构造函数在第一阶段中,不能出现Leave,也不能处理失败,因此需要将可能失败的语句移出构造函数复杂的类对象才采用两阶段构造首先是调用通常的构造函数,其中的所有操作都应当是安全的(不会Leave)第二阶段构造函数ContructL()则是进行可能Leave的构造(如申请内存空间或其他资源)工厂函数NewL将二者放在一起(即实现了两阶段构造)某些(自包含)类只需要单阶段构造154北航分布与移动计算实验室两阶段构造函数需要进行两阶段构造的类只能调用工程函数NewL()来构
52、造,因为其普通的构造函数标识为private需要进行两阶段构造的类最典型的是具有一个指向另一个C类指针的C类分析:为什么要两阶段构造?对象的构造安全防止内存泄漏155北航分布与移动计算实验室第一阶段构造不会出现Leave因此,在第一阶段构造中不能访问任何资源(内存、通信端口等)错误的:156北航分布与移动计算实验室第二阶段构造在第二阶段才创建可能Leave的成员变量或者进行其他可能Leave的操作这些成员变量在析构函数中删除,而不能放到清除栈中157北航分布与移动计算实验室NewLC 工厂函数NewL 用于指针对象分配在堆中的情况NewLC 用于指针对象还保留在清除栈中的情况158北航分布与移
53、动计算实验室NewL与NewLCNewLC的对象还在清除栈中,NewL已不在清楚栈中。159北航分布与移动计算实验室手工两阶段构造有时我们需要手工进行两阶段构造,以便在中间进行某些操作例如160北航分布与移动计算实验室三种机制总结使用TRAP Harness来处理Leave的异常使用Cleanup Stack来保存本地的堆指针使用两阶段构造来创建复合对象安全创建161北航分布与移动计算实验室看看错在哪里不要把成员变量指针压到清楚栈中。162北航分布与移动计算实验室内存泄漏检查将应用程序关闭时,将自动运行检查当前线程的堆是否已经清空Debug模式下可用可以用宏,也可以用模拟器中的调试键163北航
54、分布与移动计算实验室退出时Panic当应用程序关闭时,如果发现内存泄漏,调试模拟器将出现panic164北航分布与移动计算实验室模拟器调试键Ctrl-Alt-Shift-A显示使用的Cell和字节数,持续5秒钟。165北航分布与移动计算实验室检查内存泄漏宏_UHEAP_MARK标志开始检查当前线程的堆空间_UHEAP_MARKEND标志检查当前线程堆空间结束,与_UHEAP_MARK配对使用_UHEAP_MARK/ _UHEAP_MARKEND可以嵌套此处的内存情况应当与_UHEAP_MARK处一样_UHEAP_MARKENDC(aCount)标志检查当前线程堆空间结束,与_UHEAP_MAR
55、K配对使用期待检查结束时堆中仍然保留aCount个新分配的对象_UHEAP_CHECK(aCount)在当前嵌套层中检查是否新分配了aCount个的对象_UHEAP_CHECKALL(aCount)检查当前线程堆中所有新分配的对象是否是aCount个166北航分布与移动计算实验室检查内存泄漏宏例子检查通过检查无法通过,panic检查通过检查通过检查不通过167北航分布与移动计算实验室分配失败工具使得程序的内存请求失败用于测试当出现内存不足时是否出现内存泄漏同样可以使用宏或者调试键168北航分布与移动计算实验室内存分配失败参数设置堆空间分配失败调试键ctrl+alt+shift+p 显示对话框c
56、trl+alt+shift+q 关闭对话框 确定 随机 关闭169北航分布与移动计算实验室SETFAIL宏_UHEAP_SETFAIL(aType,aValue)失败类型aTypeDeterministic 当第n次请求时失败ERandom 随机失败,种子相同ETrueRandom 随机失败,种子从系统时间获取例如失败失败关闭170北航分布与移动计算实验室FAILNEXT宏让下面的请求失败例子171北航分布与移动计算实验室清除非CBase对象非CBase对象也可以压如清除栈中PushL经过重载TType可以直接压栈例如172北航分布与移动计算实验室清除栈工具当Leave发生时清除其他资源(不仅
57、仅是删除对象,还包括调用关闭函数等)CleanupClosePushL(T&),调用Close()CleanupReleasePushL(T&),调用Release()CleanupDeletePushL(T*),调用Delete()为此,需要TCleanupItem,它具有需要清除的对象的引用,并清楚该对象时所要进行的操作例子173北航分布与移动计算实验室构造时注意的问题缺省构造函数是私有的调用工程函数NEWL来创建对象成员变量都被0填充使用ConstructL(),在该函数中调用BaseContrulctL()。174北航分布与移动计算实验室析构时注意的问题所有析构函数都会调用CBase的
58、虚拟析构函数不要删除不属于本类的对象不要两次删除同一个对象在充分分配对象之前,需要删除它,并将指针置空(NULL)析构函数不能Leave,也不能假定整个类都被成功构造了175北航分布与移动计算实验室练习3内存管理练习176北航分布与移动计算实验室问题?177北航分布与移动计算实验室Descriptor178北航分布与移动计算实验室学习内容什么是Descriptor(描述符)为什么用Descriptor如何使用Descriptor类179北航分布与移动计算实验室介绍Descriptor是Symbian的基本类不同于字符串(String),它可以用来处理字符串,也可以用来处理二进制数据T类型的De
59、scriptor使用起来就跟其它基本类(TInt等)一样,在栈中创建180北航分布与移动计算实验室Descriptor类图181北航分布与移动计算实验室ASCII与UNICODEDescriptor同时支持8位和16位两种:TPtr8,TPtr16等Descriptor用来存储字符串时并不需要特别指定哪种类型,而是由build时的设置决定当Descriptors用来存储二进制数据时通常使用8位版本182北航分布与移动计算实验室可实例化类TBufC:缓冲区描述符(不能直接改变)TBuf:缓冲区描述符(可改变)TPtrC:指针描述符(不能改变)TPtr:指针描述符(可改变)HBufC:堆缓冲区描述
60、符(不能改变,也能声明在栈中)183北航分布与移动计算实验室Length,size,maximum lengthLength:可以存储在buffer中的数据项(item)数目Size:buffer中有效数据所占用的字节数Maximum length:可能存储在buffer中的数据项的最大数目例如Length=5, size =5 (ASCII build)/10 (unicode build) max length = 12184北航分布与移动计算实验室越界问题所有Descriptors都具有长度和最大长度信息不可能创建一个长度超过buffer能力的descriptor不可能向descript
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度高端商务区商铺租赁管理协议4篇
- 专项工程项目监管2024版委托协议版A版
- 2025年度高速公路服务区场标准化改造提升合同4篇
- 二零二五年度高压直流变压器采购及运输合同3篇
- 2025年度图书配送与图书馆管理系统承包合同4篇
- 2025年度拆迁安置补偿房屋买卖合同范本(含维修)4篇
- 2024行政文员劳动合同范本:合同违约与赔偿3篇
- 2024食堂食品安全与承包合同
- 2024讲座教授聘任合同模板
- 2025年度城市老旧小区拆迁安置房买卖合同规范版4篇
- 物业民法典知识培训课件
- 2023年初中毕业生信息技术中考知识点详解
- 2024-2025学年山东省德州市高中五校高二上学期期中考试地理试题(解析版)
- 《万方数据资源介绍》课件
- 麻风病病情分析
- 《急诊科建设与设备配置标准》
- 第一章-地震工程学概论
- TSGD7002-2023-压力管道元件型式试验规则
- 2024年度家庭医生签约服务培训课件
- 建筑工地节前停工安全检查表
- 了不起的狐狸爸爸-全文打印
评论
0/150
提交评论