2013-10-09 25 views
2

我的服務在正在運行的過程中運行良好。即使沒有顯示主要活動,它也可以控制特定的廣播接收機。它也會以特定的時間間隔自行啓動以檢查一些參數。在檢測到不存在廣播接收器時,我可以直接停止服務,直到註冊或直接在該間隔重新啓動。與此同時,該服務將以START_NOT_STICKY模式運行。將Android服務的啓動狀態從START_STICKY更改爲START_NON_STICKY

但是,當我連接到服務並註冊接收器時,是否有辦法將其運行狀態從START_NOT_STICKY更改爲START_STICKY?或者我只需要在接收器中使用isRegistered標誌,停止並重新啓動服務並在onStartCommand中檢查其值?這是一個很好的模式,還是有更好的?

這樣做的主要原因是當應用程序不需要它時,在後臺沒有運行進程。

回答

0

從android開發網站Services,START_STICKY表示該服務在完成其命令後將停留,START_NOT_STICKY將在運行其命令後結束。
從你的描述你一直說你正在運行的服務,並添加一個廣播接收器?無論是否有其他服務,廣播接收器實際上都用於接收外部請求。廣播接收器實際上是應用程序接收外部請求的第一個聯繫點,然後它將負責啓動服務以運行任何所需的命令。就定期運行命令所需的服務而言,應根據需要根據上述服務標誌的取消來啓動和結束這些服務。

GCM(Google雲消息傳遞)的示例流程。

  1. 雲服務器向註冊設備發送消息。
  2. 通過註冊設備上的谷歌播放服務,意向被髮送到註冊應用程序的廣播接收器。
  3. 廣播接收機接收意圖,將其交給執行處理所需的任何進一步命令的服務(I.E.顯示通知等)。
+0

我已經有這樣的工作。不同之處在於我已將接收器移至服務中,因爲它已設置爲受系統保護的接收器廣播。這意味着你必須實際註冊以代碼接收它們。如果我停止服務,那麼接收器也會停止。如果您將廣播接收器放置在清單中,那麼系統會自動在單獨的進程中運行該接收器,如果您的應用程序恰好被銷燬的話。 –

+0

但只是一個評論,這不是我的問題的答案。我問是否可以將服務狀態從START_STICKY更改爲START_NOT_STICKY。這並沒有回答。 –