19

常見場景 - 使用後臺服務來輪詢服務器的活動。與來自服務的活動(LocalService)進行通信 - Android最佳實踐

該服務將通過AlarmManager定期運行,並執行任務的活動(用戶點擊一個按鈕,去取從服務器的東西)。

我想知道這裏的最佳實踐。我認爲最好的設計將是Android的本地服務例如: http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

但本例中的活動有活動mBoundService一個參考,但不存在反向連接(服務有沒有方法來調用活動) 。

什麼是服務調用活動的最佳方式?

我是否使用Intents,BroadcastReceivers,Messages?怎麼樣?

回答

9

我認爲最好的設計將是Android的本地服務例如:http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

我不會。使用您可以站立的最鬆的可能的聯結。因此,平均而言,針對startService()的命令模式而不是與bindService()的綁定模式。值得注意的是,在處理配置更改(例如,屏幕旋轉)時,綁定有點痛苦。

什麼是服務調用活動的最佳方式?我是否使用Intents,BroadcastReceivers,Messages?怎麼樣?

Notify activity from service

+0

嗯,我實際上是基於它關閉您的教程:https://github.com/commonsguy/cw-andtutorials/tree/master/18-LocalService/Patchy/src/apt/tutorial有什麼不好對這種做法? – paulpooch 2011-02-05 22:11:11

1

如果您需要緊密結合的活動之間使用bindService(),你溝通的方式取決於是誰發起的通信。

如果該服務被髮起(因說,有一些新的信息共享報警),它通常會發送一個廣播。

如果該活動是始發(因說,你比如「拿來從服務器的東西」),它可以異步使用的AsyncTask或類似的處理。也就是說,您可以從AsyncTask.doInBackground()中的服務器獲取結果,並將結果發回到AsyncTask.onPostExecute中的活動。如果請求的操作預計需要很長時間 - 這種情況會稍微複雜一些 - 在這種情況下,我會將其解除耦合,然後從服務中發回廣播。