2010-01-25 112 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