By 高焕堂 2011/09/04

[ IT史上最完整、最经典的软件框架开发技术宝典 (上百篇经典文章&eBooks) ]

[ 請指教:高老師的免費on-line教學視頻 ]  

                                                                                                            

[Go Back]

 

HAL(Hardware Abstraction Layer)技术观点(1)

“Native Service” 一词幕后的涵意

        对于HAL(Hardware Abastraction Layer)模块而言,其最亲密的模块是Native Service,然而许多人并不甚了解Native Service的意义。例如,许多人并不太能清楚地区别Native Service与JNI Native Code的特性和角色。虽然两者都是以C/C++撰写的Native程序代码,但两者是不相同的。为什么会混淆这些概念呢? 其主要原因是,每个人谈到<Native Service> 这个名词时,并没有附带说明其幕后的观点。例如,Android 专家Jollen写道: 

“Android的Service分为二种:Android Service与Native Service。 

  • Android Service -- Android Service又称为Java Service,是实作在框架层(framework)里的「Server」。这里所讲的「Service」是System Service,又称为Server,与应用程序设计上所讨论的Service(android.app.Service)不同。Android Service以Java撰写。
  • Native Service -- Native Service则是实作在Runtime层里的Server。架构设计上,我们有二个选择,一个是实作Android Service、再透过JNI与HAL stub沟通;另一个选择是,跳过Android Service,让Application(Manager API)直接与Native Service沟通。” 

这是从语言(Java 与C/C++)的不同来区分的,这是从上述文字上能明显看出来的。但是还有其它观点或意涵,作者并没有明显叙述的: 

  • Native Service 与JNI Native Code是不一样的。
  • Native Service是在独立的Process跑的,所以必须提供IBinder接口,让Client来呼叫。
  • JNI Native Code 通常扮演Native Service的Client角色。
  • Native Service通常是在设备(如手机)启动阶段就启动的系统服务。这种启动阶段就启动的系统服务,又称为核心服务(Core Service)。
  • 系统服务也可以用Java撰写,所以系统服务包括:Native Core Service(如MediaPlayerService)和Java Core Service(如AudioService, SensorService)。这Java Core Service即是上述Jollen所说的Android Service。
  • 系统服务启动时,会透过ServiceManager去加入Binder Kernel。
  • 上述的“Application(Manager API)直接与Native Service沟通。”其意义是:让Application跳过Android Service而直接透过JNI Native Code来绑定(及调用)Native Service,再由Native Service与HAL stub沟通。
  • 上述的“Android的Service分为二种:Android Service与Native Service。”其意义是:Android的System Service分为两种:Android Service(即Java Core Service)与Native Service(即Native Core Service)。 

      当你具备了上述的幕后知识,就能清晰地理解文章的意义了,例如,Jollen(2011/1/3)更进一步说明Native Service扮演更重要的角色: 

“近期在进行 Android 2.3 的新框架程序代码研究,Android 2.3 在 Platform (Framework) 部份包含了许多重大的更新,其中一个部份就是 SensorService 改写成 Native Service 形式。在 Android 2.2 以前的框架,SensorService 包含在 SystemServer 里,实务上,可能也会对 SensorService 做小幅度改写,以增进效能,或是将 SensorService 独立成为一个 process。

在 Android 2.3 里的 SystemServer 已经找不到 SensorService 了,这个重要的 Android Service 被改写成 Native Service。「如何将 Android Service 改写为 Native Service」,以及「Native Service」的开发,从 Android 2.3 开始,将成为重量级主题。由于本周即将进行「Android HAL & Framework: 软硬整合实作训练」课程,利用元旦假期,也顺利完成课程以及教材的更新,将开始着重 Native Service 的讲解,并透过实例解说 Native Service 的开发。”  [歡迎光臨 高煥堂 網頁: http://www.cnblogs.com/myEIT/ ] 

       虽然Jollen在这段文章里,并没有说明将Java的SensorService 改写成C++的 Native Service 形式,其有何好处?但是你只要基于上述的幕后知识,就不难想象其幕后的理由了  

[Go Back]