Android Service與Native Service

l   前言 java

    到底甚麼是Android Service呢? 幾乎人人所談都不盡相同。有人依據Java的套件而分,例如Android 2.1裡,SensorService.java和ActivityManagerService.java屬於不一樣的套件,有人說SensorService是一項Android Service;而ActivityManagerService則不是。另有人說兩者都屬於Android Service。本文就從HAL的角度來看Android Service與其餘相關模組的關係,例如Android Service與JNI之關係。從這些關係裡,更能深入掌握Android Service的定位和角色。 android


l   三種服務 app

    只要一談到Android Service,幾乎人人所談都不盡相同了。更不用說又加上SDK Service了。例如,Android 專家Jollen寫道: 框架

 

「Android的Service分為二種:Android Service與Native Service。 spa

 

Android Service .net

       AndroidService又稱為Java Service,是實做在框架層(framework)裡的「Server」。這裡所講的「Service」是System Service,又稱為Server,與應用程式設計上所討論的Service(android.app.Service)不一樣。Android Service以Java撰寫。 orm

 

Native Service get

       NativeService則是實做在Runtime層裡的Server。架構設計上,我們有二個選擇,一個是實做Android Service、再透過JNI與HAL stub溝通;另外一個選擇是,跳過Android Service,讓Application(Manager API)直接與Native Service溝通。」 it

 

  Jollen在這段話裡,明顯地提到兩種服務:Android Service和Native Service。然而,他又提到:「與應用程式設計上所討論的Service(android.app.Service)不一樣。」這種android.app.Service就是通常通稱的APP Service或SDK Service了。因此Jollen提到三種服務:1)SDK Service、2)Android Service和3)Native Service。其關係以下圖: io

圖一、三種Service


l    Android Service與 JNI等元素之關係

 

   那麼,這些元素之間又有何關係呢? Jollen在其文章裡,寫道:

 

「採取Service架構的方式,是建議的作法,當然因為這是標準架構,也應該採用。

Service在Android框架裡的角色是「存取底層硬體」,往上層的話,能夠和應用程式溝通。所以,採用標準的Service作法,好處是在資料存取(datacommunication)的處理較為系統化。這方面,Android提供了標準的處理架構,後續再進行討論。圖上的「corelibraries」便是Service程式碼的實做,也就是,Android應用程式透過JNI(Dalvik)來到Service這一層,再透過Service載入*.so檔;而非標準作法則是讓應用程式直接透過JNI來載入*.so檔。」

 

l   非標準作法

 

    其中,非標準作法:讓應用程式直接透過JNI來載入*.so檔。其架構以下圖:

 

圖二、非標準作法

 

    非標準作法也是可(執)行的途徑之一。

 

l   標準作法

 

至於Jollen所說的標準作法:

 

「Android應用程式透過JNI(Dalvik)來到Service這一層,再透過Service載入*.so檔;」

 

其架構以下圖:

 

圖三、標準作法

 

l   Native作法

    以上兩種作法,都是可行的。此外,還有另外一種更具彈性的作法,就是採取Native 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。

在 Android2.3 裡的 SystemServer 已經找不到 SensorService 了,這個重要的 Android Service 被改寫成 Native Service。「如何將 AndroidService 改寫為 Native Service」,以及「Native Service」的開發,從 Android 2.3 開始,將成為重量級主題。由於本週即將進行「Android HAL & Framework: 軟硬整合實做訓練」課程,利用元旦假期,也順利完成課程以及教材的更新,將開始著重 Native Service 的講解,並透過實例解說 Native Service 的開發。」

 

    將Java的SensorService 改寫成C++的 Native Service 形式,其新的架構將更改以下圖:

 

圖四、Native Service作法

 

    此種Native Service作法並不是新作法,其實自從Android問市以來,MediaPlayerService和CameraService等便是採取Native Service作法了。無論哪一種作法,JNI Native Code都扮演重要角色

相關文章
相關標籤/搜索