資源描述:
《Symbian應(yīng)用程序框架淺析》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、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ù)器Z間的相互作用。應(yīng)用程序核心框架類第—層:CBase和CActive兩個基類,其中CActive也是派生于CBase,而CActive又被第二層的CConEnv派生第二層:包含兩個基本組件:AppArc和CONE。AppArc代表“
2、應(yīng)用程序架構(gòu)”,這些類提供了基木的應(yīng)用程序結(jié)構(gòu)、將系統(tǒng)信息提交到應(yīng)用程序的機(jī)制,以及使用文件服務(wù)器持久化數(shù)據(jù)。其中的類在命名時都帶冇前綴“*Apa”oCONE是控制環(huán)境的縮寫,在這個組件中的類提供用于處理用戶輸入并創(chuàng)建用戶界面的機(jī)制一一這些類主婆用于和窗口服務(wù)器進(jìn)行交互,其中的類在命名時都帶冇前綴“*Coe”o這一層中的許多類都是抽彖類,僅僅定義了一個API的接口。第三層:Uikon組件。這是具有豐富功能、非抽彖框架類的一般性設(shè)備無關(guān)實現(xiàn),并口提供了一個在所有symbianOS上公用的UI庫層。一些
3、具體的UI控件(比如列表框和滾動條等)都可以在該層創(chuàng)建,這些控件有時也被稱為Eikon控件。Uikon組件屮的類在命名時都帶有前綴“*Eik”o添加了?個公共的symbianOS實現(xiàn),和其他SymbianOSUI平臺共享。第四層:由Avkon類組成,這些類提供了核心的S60UI功能,例如菜單支持。Avkon控件的類在命名時都帶有前綴“*Akn”o在框架上添加S60特有的實現(xiàn)。第五層:針對應(yīng)用程序的層,設(shè)計自己的應(yīng)用程序,添加自定義應(yīng)用程序?qū)崿F(xiàn)。以上提到的這些類簡單來說就是:視圖(View)、文檔(D
4、ocument).應(yīng)用程序(Application)、應(yīng)用程序UI(ApplicationUI)。那么一個S60UI應(yīng)用程序是如何用這些類來實現(xiàn)具有機(jī)程序呢,這個就涉及到一個應(yīng)用程序框架的初始化問題。應(yīng)用程序框架初始化必須創(chuàng)建下面的每個方法,才能提供最小的S60應(yīng)用程序:a、框架入口:所有S60UI都實現(xiàn)一個全局函數(shù)E32DLL()(非UI類的全局入口函數(shù)為E32Main),當(dāng)應(yīng)用程序啟動時,框架將首先調(diào)用該函數(shù),該函數(shù)也稱為DLL入口點,應(yīng)用程序必須存在該函數(shù)。侮個S60UI應(yīng)用程序都是一?個多態(tài)
5、DLL。新建應(yīng)用程序?qū)嵗鹤尶蚣苷{(diào)用NcwApplication(),該函數(shù)是由DLL導(dǎo)出的唯一函數(shù),負(fù)責(zé)創(chuàng)建應(yīng)用程序類的一個實例,并返I川它的指針,以后框架使用該指針完成應(yīng)用程序的創(chuàng)建。這里在堆上創(chuàng)建應(yīng)用程序?qū)嵗褂玫氖恰皀ew”方法而不是SymbianOS常見的unew(ELeave)”方法,這是因為TRAPharness(陷阱捕捉)這時還沒有創(chuàng)立。如果系統(tǒng)不能為新的實例分配內(nèi)存,那返冋的指針就是NULL,應(yīng)用程序框架能夠檢杏到并處理這個問題。c、返回UID:由框架調(diào)用AppDllUid()返回
6、應(yīng)用程序的UID。該函數(shù)必須返回在.mmp文件中指定的UID值,該值可用于確定應(yīng)用程序的實例是否正在運(yùn)行。如果一個應(yīng)用程序正在運(yùn)行,而要啟動這個程序的另一個實例,這時該運(yùn)行的程序就會被切換到前臺,而不是重新生成一個。d、新建文檔實例:框架通過框架調(diào)用應(yīng)用程序類實例的CreateDocumentL()函數(shù)獲取指向新創(chuàng)建的Document類實例的指針。通過文檔實例指針,框架就可以調(diào)用文檔實例的某些功能,同時文檔實例也通過調(diào)用口身的NewL()和NewLC()雙重靜態(tài)構(gòu)造函數(shù)(為什么是雙重構(gòu)造,這跟Sym
7、bian的異常處理機(jī)制冇關(guān),而Z所以設(shè)計成靜態(tài)函數(shù)我現(xiàn)在也還不是很清楚)來創(chuàng)建白己。e、是否裝入文件:框架重新調(diào)用AppDllUid()來觀察是否要從文件系統(tǒng)中裝入一個文件。(似乎這里跟某些永久存儲信息冇關(guān),忖前項H還沒用到這個功能,我也不知道這個該怎么用)f、新建AppUi和View實例:框架通過調(diào)用文檔對象的CreateAppUiL()方法生成了一個AppUi實例并獲取指向它的指針。此處AppUi實例創(chuàng)建自身時使用的是C++的默認(rèn)構(gòu)造函數(shù)并返回實例的指針,之麻框架通過這個指針調(diào)用AppUi實例的
8、ConstructL()函數(shù)來完成構(gòu)造。而在這個ConstructL()函數(shù)中首先調(diào)用的是AppUi基類的BaseContructL()函數(shù),處理了讀入與該程序相關(guān)的資源的事宜,其次是新建需耍加載的View類的實例(通過雙重構(gòu)造),如果不止一個View的情況下需要調(diào)用AddViewL()函數(shù)將新建的View實例加載進(jìn)來,最后如果是多個View時通過S仇DefaultVicwL()函數(shù)設(shè)置缺省的默認(rèn)視圖。如讀入一個與該程序相關(guān)的資源文件AppUi調(diào)用了AppView類的