WEB开发网
开发学院手机开发Symbian 开发 Symbian 应用程序框架浅析 阅读

Symbian 应用程序框架浅析

 2010-05-31 20:24:00 来源:WEB开发网   
核心提示:OS常见的“new (ELeave)”方法,这是因为TRAP harness(陷阱捕捉)这时还没有创立,Symbian 应用程序框架浅析(2),如果系统不能为新的实例分配内存,那返回的指针就是NULL,这是因为该函数能被框架直接调用,而框架是不知道如何处理可能发生的异常的,应用程序框架能够检查到并处理这个问题,c、返回
OS常见的“new (ELeave)”方法,这是因为TRAP harness(陷阱捕捉)这时还没有创立。如果系统不能为新的实例分配内存,那返回的指针就是NULL,应用程序框架能够检查到并处理这个问题。

c、返回UID:由框架调用AppDllUid()返回应用程序的UID。该函数必须返回在.mmp文件中指定的UID值,该值可用于确定应用程序的实例是否正在运行。如果一个应用程序正在运行,而要启动这个程序的另一个实例,这时该运行的程序就会被切换到前台,而不是重新生成一个。

d、新建文档实例:框架通过框架调用应用程序类实例的CreateDocumentL()函数获取指向新创建的Document类实例的指针。通过文档实例指针,框架就可以调用文档实例的某些功能,同时文档实例也通过调用自身的NewL()和NewLC()双重静态构造函数(为什么是双重构造,这跟 Symbian的异常处理机制有关,而之所以设计成静态函数我现在也还不是很清楚)来创建自己。

e、是否装入文件:框架重新调用AppDllUid()来观察是否要从文件系统中装入一个文件。(似乎这里跟某些永久存储信息有关,目前项目还没用到这个功能,我也不知道这个该怎么用)

f、新建AppUi和View实例:框架通过调用文档对象的CreateAppUiL()方法生成了一个AppUi实例并获取指向它的指针。此处AppUi实例创建自身时使用的是C++的默认构造函数并返回实例的指针,之后框架通过这个指针调用AppUi实例的ConstructL()函数来完成构造。而在这个ConstructL()函数中首先调用的是AppUi基类的BaseContructL()函数,处理了读入与该程序相关的资源的事宜,其次是新建需要加载的View类的实例(通过双重构造),如果不止一个View的情况下需要调用AddViewL()函数将新建的View实例加载进来,最后如果是多个View时通过SetDefaultViewL()函数设置缺省的默认视图。如读入一个与该程序相关的资源文件AppUi调用了AppView类的 NewL函数来生成其实例,这里也是用的双重构造

g、 View的重绘:通过以上的创建过程,框架已经拥有了View的无限调度权利,此时如果有一般的system事件框架就可以通过窗口服务器调用View的 Draw()函数,至于这些System事件一般指程序启动、应用程序获得焦点或者选项菜单消失等等。在这里需要注意的是编程开发者并不能直接调用 Draw,它要求在调用前系统的graphics context处于激活状态,如果编程开发者希望进行屏幕的重绘,则只能调用DrawNow()方法。还有就是Draw函数是不能异常退出的,这是因为该函数能被框架直接调用,而框架是不知道如何处理可能发生的异常的。因此Draw自己需要捕捉和处理可能发生的错误。

Tags:Symbian 应用程序 框架

编辑录入:coldstar [复制链接] [打 印]
赞助商链接