2010-07-26 83 views

回答

5

僅僅擴展服務類將不允許您的服務將其方法公開給外部實體。如果你希望你的服務被暴露/使用你的android應用程序中運行的代碼,你將不得不爲它定義一個AIDL。這個AIDL將被分享,並作爲您的服務合同而形成。請參閱此http://developer.android.com/guide/components/aidl.html

+3

不過,假設只有你的應用程序,使得使用該服務的,沒有理由使用AIDL - 是正確的? – MalcomTucker 2010-07-26 13:49:24

+1

正確。但是,那麼爲什麼你還想在這種情況下創建一個服務。 – 2010-07-26 13:53:53

+1

我在我的應用中創建了一個本地服務來做更大的下載。通過這種方式,我可以擁有更多的控制和安全性,然後只需要一個可以每次都被殺死的異步任務。據我所知,如果資源不足,那麼與活動相關的服務不會被殺死。 – Janusz 2010-07-26 14:11:18

6

如果您希望應用程序進程之外的類能夠訪問服務,則需要使用AIDL。如果您只使用應用程序內部的服務,則可以使用local service

0

1.如何使用基於aidl的服務。

幾個好處是可以通過你的代碼段部分來獲得到後端服務:

  • 解耦前端和後端
  • 內存/ CPU密集型處理可堆疊後端服務,GC在服務不會影響前端的用戶體驗
  • 服務崩潰不會搞垮整個APP

2.how創建這樣一個服務

我寫了一個好的圖書館,你可以參考作爲一個例子http://github.com/zhchang/hogwarts

0

AIDL

Android的接口定義語言(AIDL)允許開發人員定義的編程接口,客戶端和服務器使用,以使用進程間通信(IPC)相互通信。

本文演示如何連接到Android中正在運行的服務以及如何從遠程/正在運行的服務中檢索數據。

的IPC機構實施例

設RemoteService是客戶服務和RemoteServiceClient是與遠程服務進行通信的活動。

一項服務提供有關給定兩個整數的加法,減法和乘法等數學運算的信息。要公開服務可以執行的功能,請在項目目錄中創建一個.aidl文件。

AIDL Example