android核心服務初探

來源:互聯網
上載者:User

標籤:

      終於進入android學習的進階階段,第一個課題是android的核心服務。首先,讓我們來認識一下核心服務。

      android核心服務與app服務有所區別。app服務繼承自Service基類,在app運行時啟動並綁定到Activity上。核心服務是在裝置開機時解析init.rc檔案預裝在系統中的,早於任何一個app進程和app服務。app服務是有ActivityManangerServiec啟動並綁定,而核心服務必須在ServiceManager中註冊。

      核心服務有分為native service和android service兩種。一般來說,native service有c/c++編寫,主要實現靠近驅動層的功能,android service由java編寫,主要實現靠近app的功能。不管是何種核心服務,都運行在於app不同的進程中,因此,app想要與核心服務通訊就必須使用IPC。

      IPC是android中解決處理序間通訊的精巧架構,代碼不多,功能強大。進程A想要與服務所在的進程B通訊,必須先擷取到服務的IBinder介面。IBinder介面,主要實現進程間的關聯,將會在進程A中誕生一個BinderProxy。這個代理類,運行在進程A,將代理所有對進程B中的服務要求。對於進程A來說,就像是自身擁有這個服務。使用這樣的client-server結構完美的實現了高內聚低耦合。

      前面提到核心服務由ServiceManager啟動和管理,其他進程要訪問某服務都必須通過ServiceManager才能拿到IBinder介面。啟動核心服務時,其中至關重要的一環是將核心服務登入到ManagerService中,代碼如下:

      int r = defaultServiceManager()->addService(String16("xxx"),new SQRService);

      此時,意味著該核心服務可以被請求和綁定。請求IBinder介面代碼如下:

      m_ib = sm->getService(String16("xxx"));

      從軟硬整合的角度來說,核心服務的存在是為了讓上層java應用程式使用Driver/HW Device特色的重要管道。基於android的開源特性,不同硬體廠家會有自主設計、效能各異的硬體裝置,合理編寫c層核心服務有利於充分發揮硬體特性。底層的優越設計將為上層應用的效能和使用者體驗提供強力支撐,可謂android架構中力與美的結合。

設計心得

      剛才提到的client-server結構是IPC架構中的重要思想,我們在編寫JNI層小架構的時候,也可以應用這個思想。其中的關鍵之處便是將控制點下移到c層,將服務程式封裝在自己的架構中,高內聚低耦合。c層負責擷取核心服務的IBinder介面並建立java層的BinderProxy對象,將BinderProxy的介面返回到java層。 代碼如下:

      sp<IServiceManager> sm = defaultServiceManager();

      m_ib = sm->getService(String16("xxx");

       jObject ibj = javaObjectForIBinder(env,mib);

android核心服務初探

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.