2010-01-25 171 views
0

我對活動和服務之間的溝通有一些疑問。 我想寫一個速度計應用程序,用戶界面不斷更新從GPS傳感器派生的新數據。Android:溝通活動/服務

到目前爲止,我有一個在服務中運行的LocationListener。 Android中的最佳實踐是什麼:

1)從活動訪問服務,讓我們說每秒鐘和更新用戶界面。或者,
2)讓服務更新UI。

請問您能提供一些有用的鏈接案例2)嗎?

情況1)不應該是LocalService和IBinder接口的問題,對吧?

謝謝!

+3

你能解釋一下爲什麼你在這裏打擾一個服務嗎?你不需要僅僅使用'LocationListener'。 – CommonsWare 2010-01-25 14:28:21

+0

我的應用程序將能夠在後臺錄製曲目,所以我需要一個服務。 – 2010-01-26 00:07:37

回答

2

您有一項正在接收位置更新的服務,並且您想知道實時更新活動顯示的最佳方式。

其實服務不需要「在後臺錄製曲目」。而是使用BroadcastReceiver並使用帶有PendingIntent的requestLocationUpdates(..)版本。您傳遞給requestLocationUpdates(..)的PendingIntent應指向BroadcastReceiver,您可以在其中執行錄製最新曲目位置的業務。

requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent) 

好的,所以現在你有一個BroadcastReceiver用跟蹤數據更新你的數據庫。如果你使用的是ContentProvider(而不是直接使用數據庫),那麼你可以讓你的Activity監視數據庫的變化。您可以通過調用onResume()中的ContentResolver的registerContentObserver(..)方法來完成此操作。

getContentResolver().registerContentObserver(uri, false, yourContentObserver); 

只要確保你在你的onPause()方法調用unregisterContentObserver(yourContentObserver)

+0

非常感謝。我搞砸了靜態類和觀察者接口,但你的解決方案看起來不錯。 – 2010-01-28 10:22:56