2012-12-17 32 views
2

我有一个Sqlite数据库,它有一个位置集合。内容提供者用于访问这个数据库。在服务中使用光标或通过绑定发送数据到服务

然后,通过单击活动中的位置列表,位置将被标记为活动或不在数据库中。

然后运行一个服务,该服务将监听活动位置并在到达位置时执行某些操作。

我的问题是什么是服务的最佳运作方式。

要么监视活动位置的光标,这些活动位置会在数据更改时自动更新。所有具有位置列表的活动都需要将位置设置为活动状态,然后调用服务意图以确保其运行。

正如我所看到的,这样做的好处是无论数据库中发生什么,服务都是最新的。但是我不确定每次出现位置变化时是否保持打开的光标并遍历它都是有效的。

另一种方法是让活动将位置设置为在数据库中处于活动状态,然后绑定到服务并向其发送位置数据以进行侦听。然后该服务将其存储在列表阵列中,并且每当有位置更改时都会遍历列表以查看是否已到达位置。

这样做的缺点是,对于每个位置修改,服务都必须绑定到位置并进行更改。一个优点可能是没有光标打开,并且只存储位置在其中的小列表阵列。

那么无论是光标在服务还是绑定到服务?还是有更好的方法,我错过了?

回答

1

它是效率与代码复杂性的平衡。

我会在提供者上注册一个观察者,然后每次提供者被修改时更新我的​​活动位置列表,然后我会根据当前位置扫描列表。观察者不需要与游标关联,但在调用ContentObserver.onChange()时必须重新查询提供者。

记得在背景做这项工作。使用IntentService或编写自己的运行HandlerThread的Service;我更喜欢使用IntentService或Service,因为它们不像AsyncTask那样受到Activity生命周期事件的影响。

+0

我们可以使用Volley服务吗? http://stackoverflow.com/questions/18043860/volley-or-service-with-cursor-loader –

相关问题