Android 綁定類型服務—建立綁定類型的服務

來源:互聯網
上載者:User

建立具有綁定能力的服務時,必須提供一個IBinder對象,它用於給用戶端提供與服務端進行互動的編程介面。有三種方法能夠定義這個介面:

1. 繼承Binder類

如果你的服務是你的應用程式的私人服務,並且跟用戶端運行在同一個進程中,那麼就應該通過繼承Binder類來建立你的介面,並且佛從onBind()方法中返回這個介面的一個執行個體。用戶端接收這個Binder對象,並且能夠使用這個對象直接存取Binder類中實現的或Service中的公用方法。

當你的服務只是在後台給你自己的應用程式工作時,這是首選技術。不使用這種方法建立服務介面的唯一原因是因為你的服務要其他應用程式或跨進程使用。

2. 使用信使(Messenger)

如果你的介面要跨越不同進程來進行工作,那麼你能用信使給服務建立介面。在這種方式中,服務定義了響應不同訊息物件類型的處理器。這個處理器是一個信使的基礎,它能夠跟用戶端共用一個IBinder對象,允許用戶端使用Message對象給服務端發送命令。另外,用戶端能夠定義一個自己的信使,以便服務端能夠給用戶端發送訊息。

這是執行處理序間通訊(IPC)最簡單的方法,因為信使隊列的所有請求都在一個單線程中,因此不需要針對安全執行緒來設計你的服務。

3. 使用AIDL(Android Interface Definition Language)

AIDL(Android 介面定義語言)執行所有的把對象分解成作業系統能夠理解的原語的工作,並且把它們編組到執行IPC(處理序間通訊)的不同進程中。使用信使的技術實際上是基於AIDL架構。就像前面提到的,信使在一個單線程中建立了一個所有用戶端請求的隊列,因此服務每次只能接收一個請求。但是,如果你想要服務同時處理多個請求,那麼就能直接使用AIDL,這種情況下,你的服務必須是多線程的並且要安全執行緒。

要使用直接AIDL,就必須建立一個定義編程介面的.aidl檔案。Android SDK使用這個檔案產生一個實現檔案中定義的介面和處理IPC的抽象類別,然後你能夠在你的服務中進行擴充。

注意:大多數應用程式不應該是AIDL來建立綁定類型的服務,因為它可能需要多線程的能力,並可能導致更複雜的實現。因此,AIDL不適用於大多數應用程式,並且這份文檔不討論怎樣使用它來建立服務,如果你確定需要直接使用AIDL,請看AIDL文檔。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.