Symbian應用程式執行框架

2021-04-14 13:24:08 字數 2374 閱讀 5698

我們先看乙個應用程式的入口函式:

gldef_c tint e32main()

可以看到它裝載了清除棧,那麼從現在開始清除棧就可以使用了。接下來它又執行了下面一段**:

if(coe != null)

u     建立active scheduler,將自身作為active object加入到active schelduler

u     建立與window server的連線rwssession

u     建立rwindowgroup,作為應用程式的根視窗

u     建立cwsscreendevice物件

u     建立cwindowgc物件

下面我們一一介紹每一步驟的功能:

1)      建立active scheduler

該函式首先建立了active scheduler,將自身作為active object加入到active schelduler,這樣ceikonenv就可以非同步的負責處理從window server來的標準事件(如鍵盤或是觸控螢幕事件)和重繪事件。但是active scheduler在這裡還沒有被啟動,所以暫時還沒有事件被處理。

2)      建立window server的連線

window server是ui處理的核心元件,它採用的是標準symbianc/s模式,其主要功能有:

a)       處理鍵盤、觸控螢幕事件及視窗繪製事件,並將它發到相應的客戶端的請求**。

b)      負責symbianui的視窗繪製和管理,採用樹形結構。包括視窗的建立,重新整理和銷毀。

c)       提供客戶呼叫api:rwssession,並提供其它相應的外掛程式以方便使用者擴充套件,例如animation、sprites和cursor。

ceikonenv通過定義window server的客戶類的成員變數rwssession來與window server進行通訊。其初始化過程便在這裡執行。

3)      初始化rwindowgroup

rwindwogroup是用來在window server內建立視窗組(window group)的,視窗組是一種特定的不能被顯示的window,它僅作為應用程式的根視窗。且鍵盤和事件的焦點和它聯絡在一起,這樣的話window server就知道已經有乙個應用程式已經和它產生聯絡,需要在適當的時候將按鍵等事件發給應用程式

4)      建立乙個與檔案服務的rfs連線以便於讀取資源檔案。例如,rss檔案。

5)      建立圖形上下文乙個是cwsscreendevice,另乙個是cwindowgc。

window server無法負責具體的應用程式螢幕繪製功能,而是應由應用程式間接的控制window server來繪製圖形。所以這裡有兩個類,作為ceikonenv的成員函式提供給應用程式來完成它的圖形會制功能,乙個是cwsscreendevice,另乙個是cwindowgc。cwsscreendevice實際上是乙個虛擬的螢幕裝置,儲存著螢幕的大小及各種引數。cwindowgc是用來提供視窗繪圖環境,比較常見。具體可以參考symbian sdk。

完成初始化之後,會執行如下函式:

coe->execute();

該函式是這樣的:

trapd(exitcondition, cactivescheduler::start());

這時候active scheduler被啟動了,ceikonenv作為cactive的子類,就不斷的開始響應window server傳來的事件。於是整個應用程式就開始真正的工作了。我們來看看具體的執行過程。

首先,注意到ceikonenv繼承於cactive,自然我們就需要知道runl函式是怎麼工作的,

export_c void ccoeenv::runl()

}那麼handlewseventl中又是如何處理的,我們以keydown事件為例:……}

最後我們還需要知道如何訂閱window server的事件,否則ceikonenv這個active object無法進行非同步呼叫。它是在cactivescheduler裡進行window server事件的訂閱,cone採用的active scheduler不是標準的cactivescheduler,是繼承於cactivescheduler的擴充套件ccoescheduler,它重寫了waitforanyrequest函式:

export_c void ccoescheduler::waitforanyrequest();

可以看到,ccoescheduler的不同之處在於在等待其它執行緒喚醒時,一定要執行icoeenv->readevent()這個函式,它的內部實現是乙個非同步函式,訂閱了來自於window server的事件。這樣有事件從window server過來就會執行ceikonenv的runl函式,執行完當cactivescheduler進行waitforanyrequest等待時,就會再次向window server訂閱事件,so on and so forth。

Symbian應用程式啟動順序

以下為sdk help中所寫的symbian應用程式啟動順序 0 使用者在 launcher 中選擇應用程式的圖示,launcher 以該程式的 檔案的檔名為命令列引數呼叫 1 框架裝入應用程式 dll,e32dll method 被呼叫。2 框架呼叫函式 這裡生成了乙個 類的例項,並返回乙個指向它...

讓Symbian應用程式開機自動啟動

symbian開機自動啟動的問題 一共分為兩大步,每一大步裡又分為幾個小步驟 一 建立boot檔案 1 2 在.pkg檔案目錄下建乙個新檔案,命名為 專案名.boot 3 在新建的 專案名.boot 檔案裡輸入 4 儲存這個檔案 二 編輯.pkg檔案 1 在.pkg檔案的末尾加上 專案名.boot ...

讓Symbian應用程式開機自動啟動

symbian開機自動啟動的問題 一共分為兩大步,每一大步裡又分為幾個小步驟 一 建立boot檔案 1 2 在.pkg檔案目錄下建乙個新檔案,命名為 專案名.boot 3 在新建的 專案名.boot 檔案裡輸入 4 儲存這個檔案 二 編輯.pkg檔案 1 在.pkg檔案的末尾加上 專案名.boot ...