深入SymbianOS

来源:互联网 发布:嘉实优化红利怎么样 编辑:程序博客网 时间:2024/05/19 03:25

1.   SymbianOS基于微内核模型,微内核模型被设计得尽可能小,通过服务器提供绝大多数的服务。
      这里的服务器其实是一个独立的进程,服务器进程通过与客户端(通常是某个应用)建立通信提供服务。而这种通信通常由服务器提供的客户端方使用的类来封装实现的。

      在许多情况下,服务器运行自己的进程,提供保护性和模块性。服务器和客户端总是运行在不同的线程上,很多异步函数也是在服务器中实现。

      所有的服务器都是从CActive派生来的,它们都是活动对象.

 

在Symibian OS中所有的异步服务都是Server通过C/S架构来实现的。Client是利用Server提供的特定服务的程序,Server接受来至Client的请求消息并同步或异步的处理他们。C/S架构有如下的优点:

1,可扩展性

2,有效性:相同的Server可以服务多个Client。

3,安全性:Server和Client存在于单独的进程中,并且通过消息传递进行通信。具有错误行为Client不会使他的Server崩溃(但是,Server可以通过客户线程的句柄来是具有错误行为的Client产生严重错误)。

4,异步性:在服务器完成请求的时候使用AO机制来通知他的Client。通过AO来挂起线程而不是轮询请求的状态,SymbianOS减少了处理该请求的处理器周期,从而节约了电源,这对于移动设备来说是非常重要的。

2. 子会话.

      每次打开会话时都需要消耗更多的内核资源.客户/服务器框架在现有会话功能上提供了子会话功能,这有效地解决了需要多个客户会话的功能。子会话比完全会话使用较小的开销,但在客户端的实现也更复杂。

      子会话是一咱让客户与服务器进行通信,而不需要单个会话来表示每个客户端的,轻量级方法.

      客户与服务器建立单个会话,然后为每个对象创建子会话,每个子会话和会话关联,借此进行实际的进程间通信.

  子会话必须与父客户会话相关联,因此对于支持子会话的服务器,至少有两个客户端类:一个由RSessionBase派生的会话类,一个由RSubSessionBase派生的子会话类。典型的子会话类RFile,RSocket

3.    框架解析  

       AppUi的几个重要事件处理方法:

HandleWsEventL()用于处理窗口服务器传递的事件,它的作用使框架调用下面这些具体事件处理方法;

 

HandKeyEvent()用于处理用户按键事件(此函数在控件堆栈为空时调用,否则框架将会调用OfferKeyEventL函数);

HandleForegroundEventL()当应用程序切换到前台或从前台切换到后台时调用该函数,默认的实现可以处理键盘焦点的改变;

HandleSystemEventL()用于处理由窗口服务器生成的事件;

HandleApplicationSpecificEventL()用于处理自己定义的自定义事件。默认的实现可以处理颜色方案改变的通知;

HandleCommandL()用于处理用户选择的菜单项;

HandleSwitchOnEventL()用于处理像设备切换之类的特定切换事件;

HandleMessageReadyL()用于处理窗口服务器产生的消息事件。

在以上各函数处理事件中,除了第一个HandleWsEventL()函数外,其它函数默认都是纯虚函数,需要重载才能用。

 

 

       http://www.cppblog.com/franksunny/archive/2007/09/21/32597.aspx

原创粉丝点击