2015-01-16 64 views
0

我有一個活動,顯示帶有標記的地圖。此外,我還有一個位置監聽器,它的值將更新活動數組列表並根據更新的數組列表值重新繪製標記。要更新活動的Android服務(位置偵聽器)

我希望它總是運行(即使活動放在後臺)。我明白,活動可能會被殺死,所以我希望我需要一個位置監聽器的服務。現在我的問題是:當服務實際上是獲取信息的人時,我如何更新活動數組列表並重新繪製內容?

我讀了一些關於綁定服務的內容,所以也許我需要它?不過,即使活動被殺死,我也需要運行該服務。

或者我只是創建服務,然後發送廣播到活動?

謝謝

+0

相似:http://stackoverflow.com/questions/19042007/how-can-i-get-return-value-from-android-services – marcinj

回答

1

像你有你的帖子的末尾寫的,你可以使用這個BroadcastReceiver。這就是我使用它的方式。在接收器的onReceive(...)方法

LocalBroadcastManager.getInstance(this).registerReceiver(...); 

,更新所需的數據並註銷其在活動的onDestroy()方法,再次使用LocalBroadcastManager對象: 在你ActivityonCreate(...),在本地註冊。不用說,您發送ServiceonLocationChanged(...)方法的廣播信號,因爲它與活動位於同一個包中,LocalBroadcastManager會將信號轉發給您的活動。

LocalBroadcastManager.getInstance(this).sendBroadcast(...); 
+0

謝謝。我想我不需要處理綁定服務的麻煩。我唯一擔心的是有很多初始化代碼(如server/db)在活動上完成。我想,我將不得不將所有代碼移動到服務中(因爲活動可能會被破壞並丟失這些變量)是否正確? – Snake

+0

我並不完全確定你需要怎麼處理服務器,但大拇指的規則是獨立於Activity生命週期進行所有客戶端/服務器同步。如果適用,請使用SyncAdapter類,或者在單獨的線程上運行服務 – NitroNbg