原文地址
http://www.cnmsdn.com/html/201008/1281528816ID7199.html
Symbian啟動過程
symbian的程式都是基於symbian架構的,我們在IDE中建立一個項目,就會自動產生幾個類。除了應用程式本身,還有application、ui、document、view四個類。後面的四個類都繼承於已有的架構類:CAknApplication、CAknAppUi、CCoeControl和CAknDocument。這些類在設計架構的時候都已經寫好,只是有幾個方法還沒有實現。程式啟動後架構會自己運行,但是運行過程中它還缺少一些方法的實現,而這些方法的實現就交由程式員來完成了。可以這麼說,如果我們在架構的基礎上開發程式,雖然能提供一些便利,但是總要受制於架構,說白了就是給架構打工。以上只是個人的一點淺見。
現在說說上面提到的四個類吧,這些都是架構的類。symbian架構是基於MVC的(不基於MVC的貌似還沒見過),CAknDocument對應的是Model,CCoeControl對應的是View,CAknAppUi就是Controller了。當讓這些都是通用的類,我們要實現自己的程式,就要寫自己的類,從頭開始寫當然太麻煩了,從這些類繼承,覆蓋一些函數,然後就OK。原來編程這麼簡單啊,是的,因為架構的編寫者已經為我們寫了幾萬行代碼了,從而減少了我們的負擔。
看看Symbian架構主要類的階層吧。
像很多架構一樣,通過多層次的繼承,使架構的可擴充性更強。具體的細節就不多說了,確實很複雜。如果做一般的應用,也沒有必要對架構瞭解十分透徹。
上面羅嗦了一頓架構,其實是為下文講程式啟動過程打下伏筆。我們現在以最簡單的helloworldbasic為例(sdk中的範例程式碼),講一下symbian程式的啟動過程。
C語言中,程式的入口總是在main()處。然而在symbian開發中,我們卻看不到main(),很顯然它已經是架構的一部分了。但是架構還是為我們留出了一個介面:E32Main(),架構在一開始的時候就會掉用這個函數。這個函數直接return EikStart::RunApplication( NewApplication );它就又調用了NewApplication(),NewApplication這個函數直接建立了 CHelloWorldBasicApplication的對象,就是應用程式的對象。至此,程式已經完成啟動。不對,還有UI類、View類、 Model類,它們怎麼都沒說啊,難道是打醬油去了?其實在new CHelloWorldBasicApplication的時候,這些類也被建立了,並預設執行了一些方法,只是我們感覺不到而已。
下面這張時序圖相形能說明一些問題。