



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Symbian 應(yīng)用程序框架淺析S60應(yīng)用程序的運(yùn)行依賴于大量的OS組件,例如屏幕繪圖和應(yīng)用程序數(shù)據(jù)持久性等,可以直接使用OS的窗口服務(wù)器或者文件服務(wù)器即可。應(yīng)用程序核心框架類應(yīng)用程序框架由一套核心類組成,這些類是所有應(yīng)用程序框架的基礎(chǔ)。這些類封裝了應(yīng)用程序和所需OS服務(wù)器之間的相互作用。應(yīng)用程序核心框架類第一層:CBase和CActive兩個(gè)基類,其中CActive也是派生于CBase,而CActive又被第二層的CConEnv派生第二層:包含兩個(gè)基本組件:AppArc和CONE。AppArc代表“應(yīng)用程序架構(gòu)”,這些類提供了基本的應(yīng)用程序結(jié)構(gòu)、將系統(tǒng)信息提交到應(yīng)用程序的機(jī)制,以及使用文件服務(wù)器持久化數(shù)據(jù)。其中的類在命名時(shí)都帶有前綴“*Apa”。CONE是控制環(huán)境的縮寫,在這個(gè)組件中的類提供用于處理用戶輸入并創(chuàng)建用戶界面的機(jī)制這些類主要用于和窗口服務(wù)器進(jìn)行交互,其中的類在命名時(shí)都帶有前綴“*Coe”。這一層中的許多類都是抽象類,僅僅定義了一個(gè)API的接口。第三層:Uikon組件。這是具有豐富功能、非抽象框架類的一般性設(shè)備無(wú)關(guān)實(shí)現(xiàn),并且提供了一個(gè)在所有symbian OS上公用的UI庫(kù)層。一些具體的UI控件(比如列表框和滾動(dòng)條等)都可以在該層創(chuàng)建,這些控件有時(shí)也被稱為Eikon控件。UIkon組件中的類在命名時(shí)都帶有前綴“*Eik”。添加了一個(gè)公共的symbian OS實(shí)現(xiàn),和其他Symbian OS UI平臺(tái)共享。第四層:由Avkon類組成,這些類提供了核心的S60 UI功能,例如菜單支持。Avkon控件的類在命名時(shí)都帶有前綴“*Akn”。在框架上添加S60特有的實(shí)現(xiàn)。第五層:針對(duì)應(yīng)用程序的層,設(shè)計(jì)自己的應(yīng)用程序,添加自定義應(yīng)用程序?qū)崿F(xiàn)。以上提到的這些類簡(jiǎn)單來(lái)說(shuō)就是:視圖(View)、文檔(Document)、應(yīng)用程序(Application)、應(yīng)用程序UI(Application UI)。那么一個(gè)S60 UI應(yīng)用程序是如何用這些類來(lái)實(shí)現(xiàn)其有機(jī)程序呢,這個(gè)就涉及到一個(gè)應(yīng)用程序框架的初始化問(wèn)題。應(yīng)用程序框架初始化必須創(chuàng)建下面的每個(gè)方法,才能提供最小的S60應(yīng)用程序:a、框架入口:所有S60 UI都實(shí)現(xiàn)一個(gè)全局函數(shù)E32DLL()(非UI類的全局入口函數(shù)為E32Main),當(dāng)應(yīng)用程序啟動(dòng)時(shí),框架將首先調(diào)用該函數(shù),該函數(shù)也稱為DLL入口點(diǎn),應(yīng)用程序必須存在該函數(shù)。每個(gè)S60 UI 應(yīng)用程序都是一個(gè)多態(tài)DLL。b、新建應(yīng)用程序?qū)嵗鹤尶蚣苷{(diào)用NewApplication(),該函數(shù)是由DLL導(dǎo)出的唯一函數(shù),負(fù)責(zé)創(chuàng)建應(yīng)用程序類的一個(gè)實(shí)例,并返回它的指針,以后框架使用該指針完成應(yīng)用程序的創(chuàng)建。這里在堆上創(chuàng)建應(yīng)用程序?qū)嵗褂玫氖恰皀ew”方法而不是Symbian OS常見(jiàn)的“new (ELeave)”方法,這是因?yàn)門RAP harness(陷阱捕捉)這時(shí)還沒(méi)有創(chuàng)立。如果系統(tǒng)不能為新的實(shí)例分配內(nèi)存,那返回的指針就是NULL,應(yīng)用程序框架能夠檢查到并處理這個(gè)問(wèn)題。c、返回UID:由框架調(diào)用AppDllUid()返回應(yīng)用程序的UID。該函數(shù)必須返回在.mmp文件中指定的UID值,該值可用于確定應(yīng)用程序的實(shí)例是否正在運(yùn)行。如果一個(gè)應(yīng)用程序正在運(yùn)行,而要啟動(dòng)這個(gè)程序的另一個(gè)實(shí)例,這時(shí)該運(yùn)行的程序就會(huì)被切換到前臺(tái),而不是重新生成一個(gè)。d、新建文檔實(shí)例:框架通過(guò)框架調(diào)用應(yīng)用程序類實(shí)例的CreateDocumentL()函數(shù)獲取指向新創(chuàng)建的Document類實(shí)例的指針。通過(guò)文檔實(shí)例指針,框架就可以調(diào)用文檔實(shí)例的某些功能,同時(shí)文檔實(shí)例也通過(guò)調(diào)用自身的NewL()和NewLC()雙重靜態(tài)構(gòu)造函數(shù)(為什么是雙重構(gòu)造,這跟Symbian的異常處理機(jī)制有關(guān),而之所以設(shè)計(jì)成靜態(tài)函數(shù)我現(xiàn)在也還不是很清楚)來(lái)創(chuàng)建自己。e、是否裝入文件:框架重新調(diào)用AppDllUid()來(lái)觀察是否要從文件系統(tǒng)中裝入一個(gè)文件。(似乎這里跟某些永久存儲(chǔ)信息有關(guān),目前項(xiàng)目還沒(méi)用到這個(gè)功能,我也不知道這個(gè)該怎么用)f、新建AppUi和View實(shí)例:框架通過(guò)調(diào)用文檔對(duì)象的CreateAppUiL()方法生成了一個(gè)AppUi實(shí)例并獲取指向它的指針。此處AppUi實(shí)例創(chuàng)建自身時(shí)使用的是C+的默認(rèn)構(gòu)造函數(shù)并返回實(shí)例的指針,之后框架通過(guò)這個(gè)指針調(diào)用AppUi實(shí)例的ConstructL()函數(shù)來(lái)完成構(gòu)造。而在這個(gè)ConstructL()函數(shù)中首先調(diào)用的是AppUi基類的BaseContructL()函數(shù),處理了讀入與該程序相關(guān)的資源的事宜,其次是新建需要加載的View類的實(shí)例(通過(guò)雙重構(gòu)造),如果不止一個(gè)View的情況下需要調(diào)用AddViewL()函數(shù)將新建的View實(shí)例加載進(jìn)來(lái),最后如果是多個(gè)View時(shí)通過(guò)SetDefaultViewL()函數(shù)設(shè)置缺省的默認(rèn)視圖。如讀入一個(gè)與該程序相關(guān)的資源文件AppUi調(diào)用了AppView類的NewL函數(shù)來(lái)生成其實(shí)例,這里也是用的雙重構(gòu)造g、 View的重繪:通過(guò)以上的創(chuàng)建過(guò)程,框架已經(jīng)擁有了View的無(wú)限調(diào)度權(quán)利,此時(shí)如果有一般的system事件框架就可以通過(guò)窗口服務(wù)器調(diào)用View的Draw()函數(shù),至于這些System事件一般指程序啟動(dòng)、應(yīng)用程序獲得焦點(diǎn)或者選項(xiàng)菜單消失等等。在這里需要注意的是編程開發(fā)者并不能直接調(diào)用Draw,它要求在調(diào)用前系統(tǒng)的graphics context處于激活狀態(tài),如果編程開發(fā)者希望進(jìn)行屏幕的重繪,則只能調(diào)用DrawNow()方法。還有就是Draw函數(shù)是不能異常退出的,這是因?yàn)樵摵瘮?shù)能被框架直接調(diào)用,而框架是不知道如何處理可能發(fā)生的異常的。因此Draw自己需要捕捉和處理可能發(fā)生的錯(cuò)誤。h、 處理命令:完成以上步驟后,用戶可以通過(guò)比如菜單選項(xiàng)之類的交互UI使框架調(diào)用HandleCommandL()函數(shù),并傳遞一個(gè)參數(shù)aCommand,它指明了用戶所選擇的命令,HandleCommandL()會(huì)據(jù)此來(lái)判斷不同的命令以分別調(diào)度執(zhí)行。在此處還有一個(gè)必須注意的地方是如果要程序的View實(shí)例也回應(yīng)用戶的按鍵,則必須將View實(shí)例通過(guò)AppUi的AddToStackL()函數(shù)加入到AppUi實(shí)例的控件堆棧(control stack)中。具體的調(diào)用方式實(shí)現(xiàn)以按鍵來(lái)解釋如下流程所示:對(duì)于上面的調(diào)用方式實(shí)現(xiàn)說(shuō)明,個(gè)人覺(jué)得有必要再將AppUi的幾個(gè)重要事件處理方法羅列一下:HandleWsEventL()用于處理窗口服務(wù)器傳遞的事件,它的作用使框架調(diào)用下面這些具體事件處理方法;HandKeyEvent()用于處理用戶按鍵事件(此函數(shù)在控件堆棧為空時(shí)調(diào)用,否則框架將會(huì)調(diào)用OfferKeyEventL()函數(shù));HandleForegroundEventL()當(dāng)應(yīng)用程序切換到前臺(tái)或從前臺(tái)切換到后臺(tái)時(shí)調(diào)用該函數(shù),默認(rèn)的實(shí)現(xiàn)可以處理鍵盤焦點(diǎn)的改變;HandleSystemEventL()用于處理由窗口服務(wù)器生成的事件;HandleApplicationSpecificEventL()用于處理自己定義的自定義事件。默認(rèn)的實(shí)現(xiàn)可以處理顏色方案改變的通知;HandleCommandL()用于處理用戶選擇的菜單項(xiàng);HandleSwitchOnEventL()用于處理像設(shè)備切換之類的特定切換事件;HandleMessageReadyL()用于處理窗口服務(wù)器產(chǎn)生的消息事件。在以上各函數(shù)處理事件中,除了第一個(gè)HandleWsEventL()函數(shù)外,其它函數(shù)默認(rèn)都是純虛函數(shù),需要重載才能用。通過(guò)以上對(duì)應(yīng)用程序框架初始化步驟后,一個(gè)完整的框架就創(chuàng)建完畢
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤礦機(jī)電設(shè)備強(qiáng)制維護(hù)保養(yǎng)規(guī)定 (一)
- 南京市聯(lián)合體中考語(yǔ)文一模試題及答案
- 臨港有色金屬有限公司燒結(jié)設(shè)備維護(hù)規(guī)程
- 老年自理課件
- 黨紀(jì)黨規(guī)教育
- 礦山開采與環(huán)境保護(hù)責(zé)任書樣本
- 出渣車勞務(wù)分包與建筑垃圾資源化利用合同
- 城市共享單車借用服務(wù)合同協(xié)議書
- 老人和兒童課件
- 美術(shù)蝗蟲介紹課件
- 小學(xué)三年級(jí)數(shù)學(xué)下冊(cè)口算練習(xí)題(每日一練共17份)
- 充電寶代理轉(zhuǎn)讓協(xié)議合同
- 銀行客戶投訴處理培訓(xùn)
- 電儀檢修面試試題及答案
- 西藏幼教筆試題庫(kù)及答案
- 記憶力提升圖書出版行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- XX公司事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)制度1
- 《石油化工工程建設(shè)費(fèi)用定額》2025
- 鸚鵡熱護(hù)理疑難病例討論
- 沈陽(yáng)地鐵筆試試題及答案
- 雙減政策中的課程改革探索心得體會(huì)
評(píng)論
0/150
提交評(píng)論