你有3個選項與您的服務進行通信:
- 把額外的意圖,並呼籲startService。你可以把它叫做 幾次,即使該服務已在運行
- 創建一個Messenger和使用它的服務溝通
- 使用bindService
一定要在你的服務才能使用START_STICKY
所以在活動結束後繼續運行,並且startForeground()
顯示通知或您的服務將在一段時間後(平均30分鐘到1小時)被殺死。
始動流量:
- ClientActivity(CA)啓動該服務,並在意向到服務發送CA Messenger的地址作爲一個額外的。
- 在服務啓動時,它將服務信使地址發送回 CA(使用CA Messenger地址發送消息)。
- 最後,服務返回START_STICKY。
有了這兩者,客戶端和服務器就會知道彼此的Messenger地址並且不需要綁定。
要停止服務:
要停止該服務使用您的活動follwoing:
stopService(new Intent(ActivityClass.this, ServiceClass.class));
重新連接:
如果離開clieant活動(CA)和想要在應用重新啓動時重新連接到服務,您有兩種選擇:
- 從您的CA再次啓動startService。這將再次調用服務中的onStartCommand
。僅在服務尚未運行時才調用服務onCreate()
。您可以使用上述的啓動流程來獲得服務Messenger;
- 您可以使服務Messenger公開和靜態public static Messenger mMsgService = null;
。因此,當您的CA啓動時,它可以檢查服務信使是否已被初始化(不爲空)並將其用於與服務進行通信。當設備停止時,需要設置mMsgService = null;
祝你好運。
你如何開始你的服務,我的意思是你可能會用意圖開始你的服務? –
是的,因爲我想繼續在後臺運行我正在使用'startService' – Hunt
好的,然後有什麼你想要發送到你的服務?你可以通過你曾經開始服務的相同意圖發送它。你有嘗試過嗎? –