版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Symbian OS/C+移動應用開發(fā)講義何 銳 張錦鋒牛建偉Niujianwei北京航空航天大學計算機學院分布與移動計算實驗室1主要內(nèi)容Symbian OS 概述 (1上)Symbian SDK及其開發(fā)環(huán)境 (1上)Symbian軟件開發(fā)概述 (1上)內(nèi)存管理 (1下)Descriptors (2上)動態(tài)數(shù)組 (2上)活動對象 (2下)2北航分布與移動計算實驗室主要內(nèi)容(續(xù))簡單GUI編程 (3上)資源的使用 (3上)對話框 (3下)視圖及控件 (3下)中文化 (4上)多視圖 (4上)文件及流操作(4下)MMF入門 (5上)總結與考試 ( 5下 )3北航分布與移動計算實驗室Symbian O
2、S 概述4北航分布與移動計算實驗室內(nèi)容Symbian OS演變歷史關鍵特點其它相關操作系統(tǒng)特點基礎概念組件結構5北航分布與移動計算實驗室Symbian OS6北航分布與移動計算實驗室Symbian OS針對PDA及智能手機的,能夠提供良好的軟實時的操作系統(tǒng)與之競爭的有Windows Mobile、PalmOS以及Linux,BrewSymbian OS針對如下特點進行了優(yōu)化低功耗(電池供電)小型設備長久運行、關鍵應用Symbian OS解決的問題嵌入式軟件移動計算電話其他基于ROM的應用程序7北航分布與移動計算實驗室關鍵特點主要特點:基于ROM針對電池供電健壯性好搶先式多任務微內(nèi)核基于組件完全
3、面向?qū)ο笠虼耍嚎煽啃院貌粫G失用戶數(shù)據(jù)8北航分布與移動計算實驗室通用技術9北航分布與移動計算實驗室當前的產(chǎn)品(S60平臺)Nokia N-GageNokia 6600Nokia 6630Nokia 6670Siemens Sx1Panasonic X700Nokia 7650Nokia 761010北航分布與移動計算實驗室當前的產(chǎn)品(S80和S90)Nokia 92xx communicatorsNokia 9500/9300 communicatorsNokia 7700Nokia 771011北航分布與移動計算實驗室當前的產(chǎn)品(UIQ)Motolora A1000P908P91012北航分
4、布與移動計算實驗室13北航分布與移動計算實驗室競爭者平臺PalmWindows MobileRIM (BlackBerry)Linux移動技術MIDP(J2ME)WAPLinuxSim Toolkit.NET (C#)14北航分布與移動計算實驗室Windows Mobile最初是為比較大的設備設計的操作系統(tǒng)優(yōu)點:配置高,功能強缺點:耗電大,硬件成本高針對不同的設備族Pocket PCSmart Phone封閉的環(huán)境MS提倡私有開發(fā)標準很多的開發(fā)人員易于使用用戶界面友好15北航分布與移動計算實驗室PalmOS比SymbianOS還要普及一些尤其是美國市場表現(xiàn)在退步(Pocket PC)目前Pal
5、mOS銷量不好16/32位操作系統(tǒng)第三方軟件多較多的開發(fā)人員16北航分布與移動計算實驗室LinuxLinux在C/S模式下表現(xiàn)很好為Intel架構的個人電腦設計性能和健壯性優(yōu)于Windows在服務器端有良好表現(xiàn)比Symbian OS更開放很容易定制可以直接得到RTOS Linux大量專家級的開發(fā)者免費使用17北航分布與移動計算實驗室GEOSGEOS是Nokia等公司內(nèi)部使用的一個中低端手機操作系統(tǒng),目前沒有被廣泛使用Nokia準備從GEOS過渡到Symbian平臺18北航分布與移動計算實驗室Symbian OS發(fā)展歷史1984 第一個版本Psion Organizer II8位OS支持匯編語言
6、和OPL(Organizer Programming Language)1991 Psion Series 316位Organizer(SIBO)OS內(nèi)核為EPOC應用程序和引擎分離X86銷售了1.5M SIBO機器19北航分布與移動計算實驗室Symbian OS發(fā)展歷史(續(xù))1994發(fā)展稱為32位可移植的操作系統(tǒng)1996 成立了“Psion軟件”公司1997 第一個發(fā)布了Symbian OS版本1998 Symbian公司成立:Ericsson,Motorola,Nokia,Psion1999 Panasonic公司成為股東銷售2M Symbian平臺設備20北航分布與移動計算實驗室Symb
7、ian OS發(fā)展歷史(續(xù))2000 Symbian OS授權Sony和Sanyo發(fā)布了世界上第一款Symbian智能手機, Ericsson R3802001許可證授權Siemens和Fujitsu發(fā)布Nokia 92xx第一款Series 60 手機 7650Symbian OS v6.121北航分布與移動計算實驗室Symbian OS發(fā)展歷史(續(xù))2002Siemens和Sony Ericsson變?yōu)樾鹿蓶|許可證授權SamsungSymbian OS v7.0發(fā)布Sony Ericsson發(fā)布P8002003Symbian OS v7.0s發(fā)布Series 90, UIQ設備P908發(fā)布S
8、amsung變?yōu)楣蓶|2003前3季度銷售 4M Symbian手機22北航分布與移動計算實驗室Symbian OS發(fā)展歷史(續(xù))2004發(fā)展勢頭迅猛,前景看好Nokia 9500發(fā)布LG和 Arima獲得許可證Nokia購買了Psion 的股權Symbian OS v8.0發(fā)布多個新新設備發(fā)布MotorolaPanasonic23北航分布與移動計算實驗室Symbian OS授權使用者24北航分布與移動計算實驗室Symbian OS股份分配25北航分布與移動計算實驗室基礎概念線程一個線程是執(zhí)行的單元。同一個進程的線程共享地址空間。調(diào)度器(schceduler)負責對線程(而不是進程)進行調(diào)度進程
9、內(nèi)存保護的單元。一個進程不能訪問其他進程的內(nèi)存空間。一個進程有一個或多個線程搶先式多任務線程根據(jù)它們的優(yōu)先級進行調(diào)度。優(yōu)先級高的線程能夠搶先優(yōu)先級低的線程的CPU資源26北航分布與移動計算實驗室內(nèi)存地址空間分配圖27北航分布與移動計算實驗室基礎概念上下文切換當調(diào)度器在不同的線程之間進行切換時,就需要進行上下文切換。將導致內(nèi)存表、寄存器內(nèi)容改變根據(jù)線程是否屬于同一個進程而耗時不同活動對象Symbian OS用來處理異步方法調(diào)用的特殊對象使得進行合作的多個線程能夠更加有效的利用資源堆/棧線程使用的內(nèi)存空間堆必須顯式的申請和釋放棧空間由OS負責管理28北航分布與移動計算實驗室基礎概念LeaveSym
10、bian OS的錯誤處理機制與Trap Harness一起使用與標準C+中的catch/throw機制類似Panic致命錯誤退出應用程序Panics要么由OS觸發(fā),要么由一個出現(xiàn)了嚴重錯誤的用戶線程觸發(fā),如棧溢出29北航分布與移動計算實驗室Symbian OS體系結構Symbian OS30北航分布與移動計算實驗室組件構架31北航分布與移動計算實驗室應用程序UI對于用戶而言,Symbian OS就是一系列的視圖Symbian應用程序UI包括:一個App UI對象,用戶處理用戶交互命令;由各種圖形UI元素(Controls)組成的應用程序視圖 (View);與設備無關的視圖,負責將應用程序數(shù)據(jù)顯
11、示在控件中或打印出來。(可選)32北航分布與移動計算實驗室例子:Agenda視圖UIQS60S80S9033北航分布與移動計算實驗室App UI由GUI控件構造GUI系統(tǒng)Uikon Core + Qikon on UIQ, orAvkon on S60, orCkon on S80 and S9034北航分布與移動計算實驗室UI例子TechViewR380s35北航分布與移動計算實驗室控件例子TechView屏幕快照36北航分布與移動計算實驗室UI與圖形Qi/Av/Ckon提供了UI參考實現(xiàn)的某些功能標準的EIKON是標準控件的工具集CONE: CONtrol EnvironmentAppar
12、c: Application Architecture Component,定義了應用程序結構37北航分布與移動計算實驗室GUI由圖形庫支持圖形基礎圖形設備接口(GDI)設備無關UI圖形打印圖形所見即所得字體、縮放、24位色圖形組件BITGDI:快速粘貼、縮放、旋轉(zhuǎn)等Window Server共享屏幕鍵盤與指針保持所有應用程序的軌跡發(fā)送重畫請求38北航分布與移動計算實驗室數(shù)據(jù)管理絕大多數(shù)的應用程序都具有分離的UI和引擎引擎能夠理解程序的核心算法和數(shù)據(jù)存儲而不知道數(shù)據(jù)的圖形顯示及UISymbian支持相同的引擎與不同的UI配合使用客戶/服務器的應用程序模式使得UI和引擎能夠更好地分離39北航分布
13、與移動計算實驗室支持庫能夠被應用程序直接使用的復雜引擎Rich Text(ETEXT)文件存儲工具(STORE)數(shù)據(jù)庫工具(DBMS)音頻基本程序框架庫(BAFL)40北航分布與移動計算實驗室Base提供了訪問硬件的接口Symbian Base主要包含了4個部分Symbian Base為其他所有組件提供了基礎服務和編程框架41北航分布與移動計算實驗室Symbian Base用戶可見的部分User LibraryFile ServerKernel負責管理設備資源:CPU,內(nèi)存,線程調(diào)度Device Drivers負責驅(qū)動硬件設備Device Drivers的代碼包括兩個部分,主要的部分在內(nèi)核方,
14、API部分在用戶方42北航分布與移動計算實驗室E32映象E32是Symbian OS的核心部分Kernel Executive和User Library可以看作是一個函數(shù)集合(庫);Kernel Executive運行在特權態(tài)(privileged processor state)Kernel server也是處于特權態(tài)的線程User Processes是應用程序和系統(tǒng)服務器43北航分布與移動計算實驗室通信通信是Symbian組件聯(lián)系和消息傳遞的基礎。提供了通信協(xié)議中通用的操作接口,如接收數(shù)據(jù)、發(fā)送數(shù)據(jù)、建立連接、配置網(wǎng)絡等。Socket是通信的端點,Symbian提供了類似Berkley s
15、ocket的socket APISymbian還提供了例如主機名解析、服務解析、協(xié)議信息等訪問方法可用的協(xié)議包括IrDA,PPP,SLIP,GPRS,Bluetooth,TCP/IP以及RS232通常通信是在應用程序引擎層訪問的服務器:C32,ESOCK,ETEL,NETDIAL44北航分布與移動計算實驗室移植到新設備如果將系統(tǒng)應用到同一個系列的其他產(chǎn)品(如同屬于S60),幾乎不用修改如果移植到不同的系列(S60-UIQ等),則還要修改GUI以及應用程序UI及視圖如果新的設備包含了新的硬件,則可能需要修改Base部分跨系列Qikon: UIQAvkon:S60Ckon:S80/9045北航分布
16、與移動計算實驗室JavaSymbian OS支持MIDP(CLDC1.1,MIDP2.0)及PersonalJava46北航分布與移動計算實驗室Java 優(yōu)缺點在2006年以前所有智能手機都支持廣泛運行在各種手機上一次編寫,多處運行性能和功能一直在提高性能問題依賴虛擬機47北航分布與移動計算實驗室Java on Symbian OS第一個實現(xiàn),1999,ER5JDK 1.1.4Personal Java, 2000, Symbian OS v6.0內(nèi)存占用少提供了Javaphone APIJ2ME,MIDP1.0, 2002, Symbian OS v7.0J2SE功能的一個子集占用內(nèi)存較少提
17、供了對MIDlet的支持MIDP2.0, Symbian OS V7.0sUI 功能增強安全藍牙等等.48北航分布與移動計算實驗室問題?49北航分布與移動計算實驗室20 minutes break50北航分布與移動計算實驗室Symbian SDK及其開發(fā)環(huán)境51北航分布與移動計算實驗室內(nèi)容Symbian SDK簡介常用命令主要開發(fā)工具獲取幫助52北航分布與移動計算實驗室開發(fā)環(huán)境的搭建安裝SDK到Nokia論壇下載最新的Series 60 SDK for Symbian OS到 網(wǎng)站下載最新的Active Perl Script 安裝程序 到http:/en/download/manual.js
18、p 下載最新的J2RE 安裝SDK,推薦為Symbian開發(fā)單獨建一個目錄檢查環(huán)境變量設定EPOCROOT = 安裝目錄(去盤符)在系統(tǒng)PATH中加入 epoc32tools目錄以及epoc32gccbin目錄就可以了53北航分布與移動計算實驗室Symbian SDK的獲得可以從諾基亞網(wǎng)站下載/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工具模擬器用于運行,調(diào)試,測試Symbian程序便于程序調(diào)試和錯誤追蹤并不是所有功能都能模擬,如蘭牙通信示例: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 包含所有系統(tǒng)文件systemApps 所有應用程序systemAppsappnameappname.appsystemLibs 共享.dlldocuments 用戶文件61北航分布與移動計算實驗室SDK
21、 幫助系統(tǒng)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工具根據(jù)描述文件bld.inf和.mmp文件將源文件build成指定平臺和版本的二進制代碼66北航分布與移動計算實驗室使用模擬器開發(fā)C是可以被編譯成任何指令集二進制文件的獨立于平臺的語言。67北航分布與移動計算實驗室Build工具與IDEs通常是先用命令行創(chuàng)建和配置項目,然后使用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開發(fā)向?qū)Я?9北航分布與移動計算實驗室配置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 工具條應該出現(xiàn)菜單欄上70北航分布與移動計算實驗室使用VC6也可以直接使用S60 SDK提供的VC6的AppWizard演示創(chuàng)建VC的項目文件(現(xiàn)成例子)bldmake bldfilesabld makefile vc6演示(HelloWorld)71北航分布與移動計算實驗室使用VC使用VC Appwizard72北
25、航分布與移動計算實驗室使用VC使用現(xiàn)有的例子進入C:Symbian7.0sSeries60_v20Series60Exhelloworldbasicgroup運行 bldmake bldfiles運行 abld makefile vc6用VC打開EPOC32BUILDSYMBIAN7.0SSERIES60_V20SERIES60EXHELLOWORLDBASICGROUPHELLOWORLDBASICWINS配置project-setting-executable for debug session為Epoc32releasewinsudebepoc.exe編譯運行例子嘗試跟蹤例子73北航分布
26、與移動計算實驗室其他平臺Build演示W(wǎng)INS (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 開發(fā)者論壇Nokia開發(fā)者論壇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+ 手機應用開發(fā)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軟件開發(fā)概述80北航分布與移動計算實驗室使用bldmake & abld81北航分布與移動計算實驗室使用bldmake Bldmake為工程創(chuàng)建abldcd myprojectgroupBldmake bldfiles使用abld創(chuàng)建組件或者工程文件Abld build 或者Abld build wins udeb82北航分布與移動計算實驗室Bld.inf 文件組件定義文件PRJ_MMPFILESHelloWorld.mmp與MMP在同一個
31、目錄83北航分布與移動計算實驗室編譯過程84北航分布與移動計算實驗室exe程序的.mmp文件85北航分布與移動計算實驗室UIDs每個應用程序都具有唯一的UIDsUID是一個具有唯一性的32位數(shù)字Symbian用UIDs(而不是擴展名)來標識不同的文件類型在項目定義文件(.mmp)中指定UIDs86北航分布與移動計算實驗室UIDs87北航分布與移動計算實驗室UID1文件類型指示器指定了文件的類型.EXE(UID1=KExecutableImageUid).DLL (UID1=KDynamicLibraryUid)存儲文件或者其他格式的文件88北航分布與移動計算實驗室UID2子類指示器UID2指明
32、了不同類型的DLL或者數(shù)據(jù)文件EXE程序不需要UID2對于一個應用程序而言UID2可以三種之一KUidAppKUidAppDllDocKuidAppInfoFileUID2定義在APADEF.H和APGICHFL.H中89北航分布與移動計算實驗室UID3代碼指示器應用程序DLL (.app)唯一性的標識應用程序文檔或數(shù)據(jù)文件將其關聯(lián)到特定的執(zhí)行文件和圖標對于EXE而言,不需要UID2或UID3對于一個應用程序而言,其dll文件、文檔以及AIF文件的UID3都是一樣的。90北航分布與移動計算實驗室UIDs的分配從Symbian開發(fā)者網(wǎng)絡可以得到發(fā)送email到uid指明需要的UIDs的個數(shù)指明應
33、用程序或者項目名稱0 x01000000到0 x0FFFFFFF之間的UIDs用于實驗通常最多能夠申請10個UIDs,除非是獲得了Symbian授權的公司。91北航分布與移動計算實驗室mmp文件每個項目都具有一個項目定義文件,即mmp文件,mmp文件包含了如下信息目標名稱目標類型UID源文件目錄源文件列表用戶包含文件目錄系統(tǒng)包含文件目錄庫文件調(diào)試庫文件92北航分布與移動計算實驗室建立dll93北航分布與移動計算實驗室dll 的mmp文件實例UID2指明了靜態(tài)接口DLLDll指明了UID1的值94北航分布與移動計算實驗室編譯CreateStaticDll例如,創(chuàng)建一個應用程序引擎.dll步驟95
34、北航分布與移動計算實驗室Build 一個 .app96北航分布與移動計算實驗室一個app的mmp文件97北航分布與移動計算實驗室編譯HelloWorldGUI應用程序.app步驟98北航分布與移動計算實驗室GUI資源文件資源文件描述了如菜單、對話框、工具條等信息包含了資源的索引信息由文本資源文件.rss經(jīng)過資源編譯器(rcomp.exe) 編譯后產(chǎn)生資源編譯器可以由abld.bat顯式的調(diào)用,如果使用IDE,則將IDE自動調(diào)用99北航分布與移動計算實驗室資源編譯器輸出文件二進制資源文件(.rsc,.r01,.r02,).rsc用于缺省語言版本,而.r01則表示英國英語版本,.r02是法語版本每
35、個資源由資源頭文件.rsg中的一個索引標識.rsg為資源頭文件,它包含了一系列的#define語句,定義了資源文件中的每個資源。索引便于更有效的查找資源一個資源文件中可以有1到4095個資源100北航分布與移動計算實驗室問題?101北航分布與移動計算實驗室應用程序開發(fā)102北航分布與移動計算實驗室Symbian GT到SDK的發(fā)展過程103北航分布與移動計算實驗室Symbian OS的程序104北航分布與移動計算實驗室Exe & DLLSymbian中的可執(zhí)行程序分為兩種,EXE和DLLEXE,具有一個主入口E32Main()的程序,屬于獨立的進程,常做服務器。DLL,程序代碼庫,可以有多個入
36、口,并沒有獨立的進程。系統(tǒng)通常將DLL代碼加載到當前thread上下文中。105北航分布與移動計算實驗室EXEs與DLLs的區(qū)別EXEs用于圖形無界面應用程序或者服務器單入口代碼獨立運行在PC上是獨立的窗口DLLs用于GUI應用程序多入口代碼可共享在沒有被使用時可以被卸載可以作用共享庫或者服務提供庫(.app)(provider library)106北航分布與移動計算實驗室DLL的兩種類型107北航分布與移動計算實驗室DLL的兩種類型靜態(tài)接口DLL (static interface dll)共享庫(Shared library DLL)提供固定的API,可以為其他程序調(diào)用。共享庫DLL在程
37、序需要時加載調(diào)用。共享庫DLL使用后綴名.dll多態(tài)接口DLL(polymorphic interface dll)提供庫(provider library)實現(xiàn)了一個抽象API,后綴名通常不是.dll,而是.prn, .prt, .app。多態(tài)DLL通常具有單一的入口,由需要它的程序顯式的加載108北航分布與移動計算實驗室靜態(tài)接口DLL109北航分布與移動計算實驗室多態(tài)接口DLL由于多態(tài)接口DLL只實現(xiàn)了預先定義的抽象方法,這使得不同服務能夠通過相同的接口被啟動。110北航分布與移動計算實驗室使用DLLs的優(yōu)點靜態(tài)接口DLL高效使用內(nèi)存-只加載一次二進制代碼重用運行時加載,減少了執(zhí)行代碼大小
38、多態(tài)接口DLL相同接口的多個實現(xiàn).app DLL支持文檔嵌入二者封裝好111北航分布與移動計算實驗室連接和裝載112北航分布與移動計算實驗室Symbian編碼規(guī)范目的便于閱讀理解和維護便于檢查,減少出錯概率有助于交流維護Symbian C編程習慣基本準則遵循傳統(tǒng)C規(guī)范有具有自己特色習慣決定成敗113北航分布與移動計算實驗室Symbian編碼規(guī)范通常類和函數(shù)的第一個字母大寫所有單詞連接在一起除了宏和資源標識之外,避免使用下劃線 _例如void TObject:PrepareForCommit();class CGlobalText;114北航分布與移動計算實驗室Symbian編碼規(guī)范自動變量(局
39、部變量)第一個字母小寫需要時才聲明自動變量(不要象C語言那樣,在方法開頭就聲明所有變量)永遠不要在同一行初始化多個變量全局變量不鼓勵使用全局變量大寫字母開頭非常量的全局數(shù)據(jù)在DLL中是不支持的;最好使用線程本地存儲(T.L.S.)115北航分布與移動計算實驗室Symbian編碼規(guī)范宏所有字母大寫用下劃線分隔單詞IMPORT_C,EXPORT_C,_TEST_INVARIANT指針和引用類型*或&放在類型旁邊,而不是變量名旁邊 TText* data; void TDemo:Append(const TDesC& aData);116北航分布與移動計算實驗室Symbian編碼規(guī)范類名類名通常只能
40、以C,R,T,M開頭結構用T開頭靜態(tài)類沒有前綴字母驅(qū)動類用D開頭例如Class CBase;Class TTypefaceInfo;Class RFont;Class MLaydoc;Class User; /靜態(tài)類117北航分布與移動計算實驗室Symbian編碼規(guī)范方法名通用規(guī)則有效Setters通常是SetThing()Getters通常是Thing(),(如果該方法返回數(shù)據(jù)項的話)Void SetOffset(TInt aOffset)TInt Offset() const;TInt offset = Offset();“Get”用于獲取引用TCharFormat format;GetC
41、harFormat(format);118北航分布與移動計算實驗室Symbian編碼規(guī)范方法名(續(xù))以L結尾的方法表示可能Leave以C結尾的方法表示其中將數(shù)據(jù)項放入了cleanup stack中以D結尾的方法表示其中的對象將被銷毀例如CStoreMap* map = CStoreMap:NewLC();119北航分布與移動計算實驗室Symbian編碼規(guī)范成員變量以i開頭例如class TObject TType iType; Tint iElemementOffset; TPtrC iComponentValue; 120北航分布與移動計算實驗室Symbian編碼規(guī)范方法變量(形式參數(shù))以a
42、開頭在元音前也不使用an例如void TObject:TObject(TType aType,TInt aElementOffset);最好使用方法重載,而不是缺省參數(shù),這樣可讀性好,并且更加高效121北航分布與移動計算實驗室Symbian編碼規(guī)范常數(shù)K開頭單詞開頭大寫例如const TInt KMaxNameLength = 0 x20;const TUid KEditableTextUid=268435548;122北航分布與移動計算實驗室Symbian編碼規(guī)范枚舉應當被包含在相應的類中不要全局命名空間必須用一個有意義并且無歧義的名字T開頭每個枚舉成員E開頭特定類中的常量可以實現(xiàn)成枚舉型,
43、這種情況下,可以使用K123北航分布與移動計算實驗室Symbian中的類程序設計中常用的四種類:T-,C-,M-,R-類必須具有清晰的角色,而不是簡單的方法與 數(shù)據(jù)的集合每個類一個頭文件頭文件的布局#include filesfriend classes;public, protected, private methods;private, protected, public data;124北航分布與移動計算實驗室基本類T類屬于數(shù)值類型,能夠存在于棧中不需要顯式的賦值及拷貝構造操作符,而是使用逐位復制不需要顯式的析構函數(shù)125北航分布與移動計算實驗室基本類C類分配在堆上從CBase派生的類具
44、有構造函數(shù)和析構函數(shù)傳遞時不能復制對象,只能使用引用或指針126北航分布與移動計算實驗室基本類M類表示混合接口類這種類通常只定義成員方法,而不實現(xiàn)它們,也沒有成員變量C類也可用從M類派生,從而實現(xiàn)M類中定義的方法M類沒有構造函數(shù),也沒有析構函數(shù)常用于定義回調(diào)函數(shù)等可用于多重繼承127北航分布與移動計算實驗室基本類R類表示資源類通常有真正資源的句柄不同R類句柄的含義可以完全不同R類對象可以逐位拷貝沒有明確的構造函數(shù)、析構函數(shù)、拷貝構造函數(shù)以及賦值函數(shù)通常利用open()方法來打開一個R類,而用close()關閉之Create(), Destroy()Allocate(), Free()在R類的關
45、閉函數(shù)中,通常需要釋放占用的資源128北航分布與移動計算實驗室基本類靜態(tài)類靜態(tài)類不用實例化沒有前綴通常是不同靜態(tài)實用函數(shù)的封裝如User129北航分布與移動計算實驗室OO設計幫助設計UML類圖描述模式設計UML簡介結構塊 事物(4種)結構事物(7種) 行為事物 分組事物 注釋事物關系(4種)圖 (9種)運行規(guī)則公共約束130北航分布與移動計算實驗室UML類圖示例131北航分布與移動計算實驗室GUI應用程序框架132北航分布與移動計算實驗室問題?133北航分布與移動計算實驗室完成2練習2:Symbian開發(fā)環(huán)境熟悉134北航分布與移動計算實驗室內(nèi)存管理135北航分布與移動計算實驗室重要性本來內(nèi)存
46、就少系統(tǒng)運行時間會很長,極少重啟內(nèi)核、服務器以及一些應用程序運行幾年即使電源關閉,也需要保持某些應用的狀態(tài)少量的內(nèi)存泄漏經(jīng)過積累也會造成災難性的后果編寫的程序必須是沒有內(nèi)存泄漏的136北航分布與移動計算實驗室因此所有分配的堆內(nèi)存必須至少有一個指針關聯(lián)(即使出現(xiàn)內(nèi)存不足的情況)所有堆內(nèi)存必須在使用完以后盡快釋放137北航分布與移動計算實驗室獨特機制Symbian OS采用不同于其他任何平臺的獨特機制Trap harness (陷阱套) 執(zhí)行代碼Cleanup stack (清除棧)Two phase construction (兩階段構造)復合對象必須熟悉上述三個機制,以保證程序是內(nèi)存安全的13
47、8北航分布與移動計算實驗室示例使用了3種機制139北航分布與移動計算實驗室棧與堆對象棧中的對象能夠被系統(tǒng)自動刪除堆中的對象必須由程序員顯式的刪除棧中的指針可以指向堆空間140北航分布與移動計算實驗室內(nèi)存泄漏分配在堆中的對象,不再有指針變量引用(孤兒對象),從而無法釋放該內(nèi)存,就形成了內(nèi)存泄漏。丟失該對象的地址,無法刪除141北航分布與移動計算實驗室發(fā)生異常時Leave142北航分布與移動計算實驗室捕捉異常異常通常是運行時因為缺少某種資源而引發(fā)的錯誤:例如內(nèi)存不足或者通信端口不可用異常與程序錯誤的區(qū)別:后者是可以通過修改程序而消除掉的,但是要確保程序不會產(chǎn)生異常幾乎是不可能的程序發(fā)生異常時Lea
48、ve,會被上層調(diào)用中的TRAP 捕捉143北航分布與移動計算實驗室TRAP Harness宏如果異常時Leave,將會返回到最近的一個TRAP Harness兩個宏TRAP與TRAPD后者不需要程序員自己錯誤參數(shù)在程序的最開始處使用TRAPTRAP Harness要少用,尤其要避免過多嵌套144北航分布與移動計算實驗室New(ELeave)屬于c+的操作符重載任何類都可以使用若沒有足夠內(nèi)存空間的話,將調(diào)用User:Leave()以下二者相當145北航分布與移動計算實驗室TRAP與Leave提示將95的錯誤上交給系統(tǒng)處理,不要自己處理如果不是自己處理所有錯誤信息,則將錯誤用User:Leave(
49、)或User:LeaveIfError()上傳TRAP的代價很高,永遠不要連續(xù)使用多個TRAP,而是讓方法Leave,從而將錯誤交給調(diào)用者處理記住使用new(ELeave)而不是new146北航分布與移動計算實驗室Cleanup Stack清除棧用來保存分配在堆上的對象指針一旦出現(xiàn)異常,系統(tǒng)能夠根據(jù)清除棧釋放出錯程序在堆中分配的空間,從而避免了內(nèi)存泄漏147北航分布與移動計算實驗室Cleanup Stack對象分配失敗148北航分布與移動計算實驗室Cleanup Stack使用場合在一個可能Leave的函數(shù)中產(chǎn)生的,棧上指向C對象的自動變量指針要Push到清除棧中。一旦出現(xiàn)了異常,TRAP h
50、arness將調(diào)用PopAndDestropy()來清空清除棧上所有從調(diào)用TRAP時壓進去的變量,并釋放相應的堆空間。當不會出現(xiàn)Leave時,需要將對象指針從清除棧中彈出。當復合對象的成員變量指向一個對象時,由該復合對象的析構函數(shù)負責刪除該對象。149北航分布與移動計算實驗室看看彈出了哪些對象150北航分布與移動計算實驗室聲明Clean Stack每個應用程序都有自己的清除??刂婆_程序(.exe)需要在E32Main中聲明而GUI程序則由CONE創(chuàng)建(因此不需要我們自己創(chuàng)建)151北航分布與移動計算實驗室注意類的成員變量不用放在清除棧中否則會造成多次刪除類的析構函數(shù)中刪除一次在退出清除棧時刪除
51、一次152北航分布與移動計算實驗室兩階段構造例子第一階段構造第二階段構造153北航分布與移動計算實驗室兩階段構造第一階段就是c+的構造函數(shù)在第一階段中,不能出現(xiàn)Leave,也不能處理失敗,因此需要將可能失敗的語句移出構造函數(shù)復雜的類對象才采用兩階段構造首先是調(diào)用通常的構造函數(shù),其中的所有操作都應當是安全的(不會Leave)第二階段構造函數(shù)ContructL()則是進行可能Leave的構造(如申請內(nèi)存空間或其他資源)工廠函數(shù)NewL將二者放在一起(即實現(xiàn)了兩階段構造)某些(自包含)類只需要單階段構造154北航分布與移動計算實驗室兩階段構造函數(shù)需要進行兩階段構造的類只能調(diào)用工程函數(shù)NewL()來構
52、造,因為其普通的構造函數(shù)標識為private需要進行兩階段構造的類最典型的是具有一個指向另一個C類指針的C類分析:為什么要兩階段構造?對象的構造安全防止內(nèi)存泄漏155北航分布與移動計算實驗室第一階段構造不會出現(xiàn)Leave因此,在第一階段構造中不能訪問任何資源(內(nèi)存、通信端口等)錯誤的:156北航分布與移動計算實驗室第二階段構造在第二階段才創(chuàng)建可能Leave的成員變量或者進行其他可能Leave的操作這些成員變量在析構函數(shù)中刪除,而不能放到清除棧中157北航分布與移動計算實驗室NewLC 工廠函數(shù)NewL 用于指針對象分配在堆中的情況NewLC 用于指針對象還保留在清除棧中的情況158北航分布與移
53、動計算實驗室NewL與NewLCNewLC的對象還在清除棧中,NewL已不在清楚棧中。159北航分布與移動計算實驗室手工兩階段構造有時我們需要手工進行兩階段構造,以便在中間進行某些操作例如160北航分布與移動計算實驗室三種機制總結使用TRAP Harness來處理Leave的異常使用Cleanup Stack來保存本地的堆指針使用兩階段構造來創(chuàng)建復合對象安全創(chuàng)建161北航分布與移動計算實驗室看看錯在哪里不要把成員變量指針壓到清楚棧中。162北航分布與移動計算實驗室內(nèi)存泄漏檢查將應用程序關閉時,將自動運行檢查當前線程的堆是否已經(jīng)清空Debug模式下可用可以用宏,也可以用模擬器中的調(diào)試鍵163北航
54、分布與移動計算實驗室退出時Panic當應用程序關閉時,如果發(fā)現(xiàn)內(nèi)存泄漏,調(diào)試模擬器將出現(xiàn)panic164北航分布與移動計算實驗室模擬器調(diào)試鍵Ctrl-Alt-Shift-A顯示使用的Cell和字節(jié)數(shù),持續(xù)5秒鐘。165北航分布與移動計算實驗室檢查內(nèi)存泄漏宏_UHEAP_MARK標志開始檢查當前線程的堆空間_UHEAP_MARKEND標志檢查當前線程堆空間結束,與_UHEAP_MARK配對使用_UHEAP_MARK/ _UHEAP_MARKEND可以嵌套此處的內(nèi)存情況應當與_UHEAP_MARK處一樣_UHEAP_MARKENDC(aCount)標志檢查當前線程堆空間結束,與_UHEAP_MAR
55、K配對使用期待檢查結束時堆中仍然保留aCount個新分配的對象_UHEAP_CHECK(aCount)在當前嵌套層中檢查是否新分配了aCount個的對象_UHEAP_CHECKALL(aCount)檢查當前線程堆中所有新分配的對象是否是aCount個166北航分布與移動計算實驗室檢查內(nèi)存泄漏宏例子檢查通過檢查無法通過,panic檢查通過檢查通過檢查不通過167北航分布與移動計算實驗室分配失敗工具使得程序的內(nèi)存請求失敗用于測試當出現(xiàn)內(nèi)存不足時是否出現(xiàn)內(nèi)存泄漏同樣可以使用宏或者調(diào)試鍵168北航分布與移動計算實驗室內(nèi)存分配失敗參數(shù)設置堆空間分配失敗調(diào)試鍵ctrl+alt+shift+p 顯示對話框c
56、trl+alt+shift+q 關閉對話框 確定 隨機 關閉169北航分布與移動計算實驗室SETFAIL宏_UHEAP_SETFAIL(aType,aValue)失敗類型aTypeDeterministic 當?shù)趎次請求時失敗ERandom 隨機失敗,種子相同ETrueRandom 隨機失敗,種子從系統(tǒng)時間獲取例如失敗失敗關閉170北航分布與移動計算實驗室FAILNEXT宏讓下面的請求失敗例子171北航分布與移動計算實驗室清除非CBase對象非CBase對象也可以壓如清除棧中PushL經(jīng)過重載TType可以直接壓棧例如172北航分布與移動計算實驗室清除棧工具當Leave發(fā)生時清除其他資源(不僅
57、僅是刪除對象,還包括調(diào)用關閉函數(shù)等)CleanupClosePushL(T&),調(diào)用Close()CleanupReleasePushL(T&),調(diào)用Release()CleanupDeletePushL(T*),調(diào)用Delete()為此,需要TCleanupItem,它具有需要清除的對象的引用,并清楚該對象時所要進行的操作例子173北航分布與移動計算實驗室構造時注意的問題缺省構造函數(shù)是私有的調(diào)用工程函數(shù)NEWL來創(chuàng)建對象成員變量都被0填充使用ConstructL(),在該函數(shù)中調(diào)用BaseContrulctL()。174北航分布與移動計算實驗室析構時注意的問題所有析構函數(shù)都會調(diào)用CBase的
58、虛擬析構函數(shù)不要刪除不屬于本類的對象不要兩次刪除同一個對象在充分分配對象之前,需要刪除它,并將指針置空(NULL)析構函數(shù)不能Leave,也不能假定整個類都被成功構造了175北航分布與移動計算實驗室練習3內(nèi)存管理練習176北航分布與移動計算實驗室問題?177北航分布與移動計算實驗室Descriptor178北航分布與移動計算實驗室學習內(nèi)容什么是Descriptor(描述符)為什么用Descriptor如何使用Descriptor類179北航分布與移動計算實驗室介紹Descriptor是Symbian的基本類不同于字符串(String),它可以用來處理字符串,也可以用來處理二進制數(shù)據(jù)T類型的De
59、scriptor使用起來就跟其它基本類(TInt等)一樣,在棧中創(chuàng)建180北航分布與移動計算實驗室Descriptor類圖181北航分布與移動計算實驗室ASCII與UNICODEDescriptor同時支持8位和16位兩種:TPtr8,TPtr16等Descriptor用來存儲字符串時并不需要特別指定哪種類型,而是由build時的設置決定當Descriptors用來存儲二進制數(shù)據(jù)時通常使用8位版本182北航分布與移動計算實驗室可實例化類TBufC:緩沖區(qū)描述符(不能直接改變)TBuf:緩沖區(qū)描述符(可改變)TPtrC:指針描述符(不能改變)TPtr:指針描述符(可改變)HBufC:堆緩沖區(qū)描述
60、符(不能改變,也能聲明在棧中)183北航分布與移動計算實驗室Length,size,maximum lengthLength:可以存儲在buffer中的數(shù)據(jù)項(item)數(shù)目Size:buffer中有效數(shù)據(jù)所占用的字節(jié)數(shù)Maximum length:可能存儲在buffer中的數(shù)據(jù)項的最大數(shù)目例如Length=5, size =5 (ASCII build)/10 (unicode build) max length = 12184北航分布與移動計算實驗室越界問題所有Descriptors都具有長度和最大長度信息不可能創(chuàng)建一個長度超過buffer能力的descriptor不可能向descript
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度展覽館照明設備采購合同范本3篇
- 二零二五版建筑工程項目招投標與合同風險評估與管理協(xié)議3篇
- 二零二五年度辦公室租賃合同含停車服務2篇
- 二零二五版跨區(qū)域公司間資金拆借合同范例2篇
- 二零二五年度環(huán)保設備班組工人勞務合同3篇
- 二零二五版教師臨時聘用與教育品牌建設合同3篇
- 二零二五年版農(nóng)業(yè)科技項目合同信用評價與推廣合作合同3篇
- 二零二五年度石材礦山開采權轉(zhuǎn)讓合同2篇
- 二零二五版租賃合同:租賃合同信息化管理平臺使用協(xié)議3篇
- 深圳汽車租賃合同模板2025版6篇
- 物業(yè)民法典知識培訓課件
- 2024-2025學年山東省德州市高中五校高二上學期期中考試地理試題(解析版)
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 2024年度家庭醫(yī)生簽約服務培訓課件
- 建筑工地節(jié)前停工安全檢查表
- 了不起的狐貍爸爸-全文打印
- 派克與永華互換表
- 第二章流體靜力學基礎
- 小學高年級語文作文情景互動教學策略探究教研課題論文開題中期結題報告教學反思經(jīng)驗交流
- 春節(jié)新年紅燈籠中國風信紙
- 注塑件生產(chǎn)通用標準
評論
0/150
提交評論