欢迎来到天天文库
浏览记录
ID:41744473
大小:120.87 KB
页数:4页
时间:2019-08-31
《Symbian应用程序框架浅析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Symbian应用程序框架浅析S60应用程序的运行依赖于大量的OS组件,例如屏幕绘图和应用程序数据持久性等,可以肓接使用OS的窗口服务器或者文件服务器即可。应用程序核心框架类应用程序框架山一套核心类组成,这些类是所有应用程序根架的基础。这些类封装了应用程序和所需OS服务器Z间的相互作用。应用程序核心框架类第—层:CBase和CActive两个基类,其中CActive也是派生于CBase,而CActive又被第二层的CConEnv派生第二层:包含两个基本组件:AppArc和CONE。AppArc代表“
2、应用程序架构”,这些类提供了基木的应用程序结构、将系统信息提交到应用程序的机制,以及使用文件服务器持久化数据。其中的类在命名时都带冇前缀“*Apa”oCONE是控制环境的缩写,在这个组件中的类提供用于处理用户输入并创建用户界面的机制一一这些类主婆用于和窗口服务器进行交互,其中的类在命名时都带冇前缀“*Coe”o这一层中的许多类都是抽彖类,仅仅定义了一个API的接口。第三层:Uikon组件。这是具有丰富功能、非抽彖框架类的一般性设备无关实现,并口提供了一个在所有symbianOS上公用的UI库层。一些
3、具体的UI控件(比如列表框和滚动条等)都可以在该层创建,这些控件有时也被称为Eikon控件。Uikon组件屮的类在命名时都带有前缀“*Eik”o添加了•个公共的symbianOS实现,和其他SymbianOSUI平台共享。第四层:由Avkon类组成,这些类提供了核心的S60UI功能,例如菜单支持。Avkon控件的类在命名时都带有前缀“*Akn”o在框架上添加S60特有的实现。第五层:针对应用程序的层,设计自己的应用程序,添加自定义应用程序实现。以上提到的这些类简单来说就是:视图(View)、文档(D
4、ocument).应用程序(Application)、应用程序UI(ApplicationUI)。那么一个S60UI应用程序是如何用这些类来实现具有机程序呢,这个就涉及到一个应用程序框架的初始化问题。应用程序框架初始化必须创建下面的每个方法,才能提供最小的S60应用程序:a、框架入口:所有S60UI都实现一个全局函数E32DLL()(非UI类的全局入口函数为E32Main),当应用程序启动时,框架将首先调用该函数,该函数也称为DLL入口点,应用程序必须存在该函数。侮个S60UI应用程序都是一•个多态
5、DLL。新建应用程序实例:让框架调用NcwApplication(),该函数是由DLL导出的唯一函数,负责创建应用程序类的一个实例,并返I川它的指针,以后框架使用该指针完成应用程序的创建。这里在堆上创建应用程序实例使用的是“new”方法而不是SymbianOS常见的unew(ELeave)”方法,这是因为TRAPharness(陷阱捕捉)这时还没有创立。如果系统不能为新的实例分配内存,那返冋的指针就是NULL,应用程序框架能够检杏到并处理这个问题。c、返回UID:由框架调用AppDllUid()返回
6、应用程序的UID。该函数必须返回在.mmp文件中指定的UID值,该值可用于确定应用程序的实例是否正在运行。如果一个应用程序正在运行,而要启动这个程序的另一个实例,这时该运行的程序就会被切换到前台,而不是重新生成一个。d、新建文档实例:框架通过框架调用应用程序类实例的CreateDocumentL()函数获取指向新创建的Document类实例的指针。通过文档实例指针,框架就可以调用文档实例的某些功能,同时文档实例也通过调用口身的NewL()和NewLC()双重静态构造函数(为什么是双重构造,这跟Sym
7、bian的异常处理机制冇关,而Z所以设计成静态函数我现在也还不是很清楚)來创建白己。e、是否装入文件:框架重新调用AppDllUid()来观察是否要从文件系统中装入一个文件。(似乎这里跟某些永久存储信息冇关,忖前项H还没用到这个功能,我也不知道这个该怎么用)f、新建AppUi和View实例:框架通过调用文档对象的CreateAppUiL()方法生成了一个AppUi实例并获取指向它的指针。此处AppUi实例创建自身时使用的是C++的默认构造函数并返回实例的指针,之麻框架通过这个指针调用AppUi实例的
8、ConstructL()函数来完成构造。而在这个ConstructL()函数中首先调用的是AppUi基类的BaseContructL()函数,处理了读入与该程序相关的资源的事宜,其次是新建需耍加载的View类的实例(通过双重构造),如果不止一个View的情况下需要调用AddViewL()函数将新建的View实例加载进來,最后如果是多个View时通过S仇DefaultVicwL()函数设置缺省的默认视图。如读入一个与该程序相关的资源文件AppUi调用了AppView类的
此文档下载收益归作者所有