欢迎来到天天文库
浏览记录
ID:9682203
大小:51.00 KB
页数:3页
时间:2018-05-05
《symbian 应用程序框架浅析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Symbian应用程序框架浅析 S60应用程序的运行依赖于大量的OS组件,例如屏幕绘图和应用程序数据持久性等,可以直接使用OS的窗口服务器或者文件服务器即可。 应用程序核心框架类 应用程序框架由一套核心类组成,这些类是所有应用程序框架的基础。这些类封装了应用程序和所需OS服务器之间的相互作用。 第一层:CBase和CActive两个基类,其中CActive也是派生于CBase,而CActive又被第二层的CConEnv派生 第二层:包含两个基本组件:AppArc和CONE。AppArc代表应用程序架构,这些类提供了基本的应用程序结构、将系统信息提交到应用程序的机制,以及
2、使用文件服务器持久化数据。其中的类在命名时都带有前缀*Apa。CONE是控制环境的缩写,在这个组件中的类提供用于处理用户输入并创建用户界面的机制--这些类主要用于和窗口服务器进行交互,其中的类在命名时都带有前缀*Coe。这一层中的许多类都是抽象类,仅仅定义了一个API的接口。 第三层:Uikon组件。这是具有丰富功能、非抽象框架类的一般性设备无关实现,并且提供了一个在所有symbianOS上公用的UI库层。一些具体的UI控件(比如列表框和滚动条等)都可以在该层创建,这些控件有时也被称为Eikon控件。UIkon组件中的类在命名时都带有前缀*Eik。添加了一个公共的symbianOS
3、实现,和其他SymbianOSUI平台共享。 第四层:由Avkon类组成,这些类提供了核心的S60UI功能,例如菜单支持。Avkon控件的类在命名时都带有前缀*Akn。在框架上添加S60特有的实现。 第五层:针对应用程序的层,设计自己的应用程序,添加自定义应用程序实现。 以上提到的这些类简单来说就是:视图(Vieent)、应用程序(Application)、应用程序UI(ApplicationUI)。那么一个S60UI应用程序是如何用这些类来实现其有机程序呢,这个就涉及到一个应用程序框架的初始化问题。 应用程序框架初始化 必须创建下面的每个方法,才能提供最小的S60应用程序
4、: a、框架入口:所有S60UI都实现一个全局函数E32DLL()(非UI类的全局入口函数为E32Main),当应用程序启动时,框架将首先调用该函数,该函数也称为DLL入口点,应用程序必须存在该函数。每个S60UI应用程序都是一个多态DLL。 b、新建应用程序实例:让框架调用NebianOS常见的nemp文件中指定的UID值,该值可用于确定应用程序的实例是否正在运行。如果一个应用程序正在运行,而要启动这个程序的另一个实例,这时该运行的程序就会被切换到前台,而不是重新生成一个。 d、新建文档实例:框架通过框架调用应用程序类实例的CreateDocumentL()函数获取指向新创建
5、的Document类实例的指针。通过文档实例指针,框架就可以调用文档实例的某些功能,同时文档实例也通过调用自身的Nebian的异常处理机制有关,而之所以设计成静态函数我现在也还不是很清楚)来创建自己。 e、是否装入文件:框架重新调用AppDllUid()来观察是否要从文件系统中装入一个文件。(似乎这里跟某些永久存储信息有关,目前项目还没用到这个功能,我也不知道这个该怎么用) f、新建AppUi和Vie事件框架就可以通过窗口服务器调用Vie事件一般指程序启动、应用程序获得焦点或者选项菜单消失等等。在这里需要注意的是编程开发者并不能直接调用DraandL()函数,并传递一个参数ama
6、nd,它指明了用户所选择的命令,HandlemandL()会据此来判断不同的命令以分别调度执行。在此处还有一个必须注意的地方是如果要程序的View实例也回应用户的按键,则必须将View实例通过AppUi的AddToStackL()函数加入到AppUi实例的控件堆栈(controlstack)中。 对于上面的调用方式实现说明,个人觉得有必要再将AppUi的几个重要事件处理方法罗列一下: HandleWsEventL()用于处理窗口服务器传递的事件,它的作12下一页——感谢阅读这篇文章,..,用使框架调用下面这些具体事件处理方法; HandKeyEvent()用于处理用户按键事件(
7、此函数在控件堆栈为空时调用,否则框架将会调用OfferKeyEventL()函数); HandleForegroundEventL()当应用程序切换到前台或从前台切换到后台时调用该函数,默认的实现可以处理键盘焦点的改变; HandleSystemEventL()用于处理由窗口服务器生成的事件; HandleApplicationSpecificEventL()用于处理自己定义的自定义事件。默认的实现可以处理颜色方案改变的通知; Handlemand
此文档下载收益归作者所有