我目前在我的android應用程序中有兩項服務,爲簡單起見,我將撥打DataService
和CommunicationService
。 DataService
從內容提供者檢索數據,然後將其序列化並傳遞到CommunicationService
。然後CommunicationService
將序列化的數據分成數據包,並一次發送給第三方設備一個數據包。 CommunicationService
知道發送下一個數據包的方式是通過BroadcastReceiver
。從廣播接收器發送未綁定服務消息
CommunicationService
由DataService
開始,但是未結合的,並且具有比DataService
更長的壽命(其一旦其已經開始CommunicationService
結束時)。 BroadcastReceiver
調用CommunicationService
的方法讓它知道現在是發送下一個數據包的時間的最佳方法是什麼?我見過的兩個想法是:
- 在BroadcastReceiver中綁定服務,調用方法並解除綁定。這似乎是最好的情況下非常糟糕的做法,最壞的情況是不可行的。
peekService
,儘管看起來這隻適用於已經綁定了至少一次的服務,該服務將其排除。
我知道這個架構看起來有點混亂,但CommunicationService
的目標是能夠在與第三方設備通信的多個應用中重複使用它;因此,它不能太緊密地綁定到特定的實現。
你不能從'BroadcastReceiver'調用'context.bindService()'。你能解釋一下爲什麼你不能只從接收器調用'startService()'?即使服務已經運行,它也會收到一個'onStartCommand()' – Karakuri
的調用。我的印象是,startService()會啓動一個服務的新實例 - 沒有意識到它只是表示現有的服務。這似乎是最簡單的解決方案,所以我最終可能會用它!謝謝! – Aaron