2017-07-19 57 views
0

我想創建一個庫,它具有從溫度傳感器讀取值並進行一些處理的服務。該服務將繼續監視傳感器值,並在檢測到高值時發出警報。我想用這個庫建立幾個應用程序。我打算將我的庫作爲依賴項添加到每個應用程序,並且如果一個應用程序啓動了我的服務,請說「TemperatureService」,那麼其他應用程序應該使用相同的服務而不創建新服務。如何在android中無限期地運行共享服務?

此外,服務啓動時,它應該無限期地運行。當我將來運行一個新的應用程序時,它應該能夠綁定到當前正在運行的服務。

我試圖使用IntentService,但是當我殺了我的應用程序的服務也停止。

Intent i = new Intent(this.getBaseContext(), MyTestService.class); 
i.putExtra("foo", "bar"); 
startService(i); 

我該如何解決我的問題?

回答

1

您應該使用開始服務,而使用IntentService因爲意圖服務停止本身工作就完成了。

所以,如果你想連續運行服務,你需要創建服務,並從OnServiceConnected()返回值STICKY方法是Service類中的回調方法。

而對於跨多個應用程序的通信,您需要實施AIDL 並共享相同的界面以與您的應用程序進行通信。

Android Interface Definition Language (AIDL)

AIDL實現

服務實現

IPC在android系統

本地電話實現

Android Interface Definition Language (AIDL) and Remote Service

上面的鏈接有完整的演示如何創建和使用服務和AIDL的進程間通信示例使用兩個應用程序,但您可以創建多個客戶端應用程序。

+0

如何讓服務可共享?一個應用程序可以啓動該服務,然後所有應用程序都能夠訪問相同的服務。但是當我從不同的應用程序調用bindService時,它會創建一個新的服務實例。 – chamathabeysinghe

+0

@chamathabeysinghe看到我更新的答案與鏈接有一個小演示。 –

1

爲了這個目的,你必須使用Android接口定義語言,和進程間通信(IPC)查看詳細跟隨this