symbian程序启动过程
2010-08-11 12:13:00 来源:WEB开发网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的时候,这些类也被创建了,并默认执行了一些方法,只是我们感觉不到而已。
下面这张时序图相形能说明一些问题。
更多精彩
赞助商链接