0

细节

该应用程序启动时会运行一个后台服务。在此服务中,ononStartCommand()开始使用读取之间通过的米的参数侦听 GPS 位置。比如说50米。每次读取位置时,都会发生以下操作:

  • 读取位置存储在本地数据库中
  • 从数据库中检索所有未发送的位置
  • 位置被发送到网络服务器
  • 如果发送成功,则从数据库中删除位置

现在,每次读取位置时都会发生这种行为。用户可能正在步行,这需要一些时间才能达到 50 米或快速行驶,而可以完成许多读取,并且数据库插入/检索中的事情可能会变得混乱。因此,主要请求之一是按顺序处理所有读取位置,因为它们被读取。类似于:读取位置 1,插入,发送...读取位置 2,插入,发送。

我找不到正确的方法来做到这一点。如您所知,该服务与应用程序在同一个主线程中运行,因此我肯定需要使用线程来保持 UI 运行顺畅。

我正在考虑使用 ExecutorService 和 Executors.newSingleThreadExecutor() 每次读取位置时向其提交新线程。通过这种方式,我确保处理是按顺序完成的,但是......我为每次读取创建新线程,这可能不是一件好事。

对于这种情况,您会建议什么最佳方法?

4

1 回答 1

1

我要做的是删除服务并在每次读取位置时抛出一个IntentService 。

您可以将requestLocationUpdates与挂起的意图参数一起使用,并将挂起的意图参数设置为触发您的意图服务的意图。

然后在意图服务的onHandleIntent 中,您可以处理位置更新。意图由意图服务按顺序处理,并在单独的线程中处理它们(然后到期)。

如果你只需要在后台消费一个镜头事件,intentservice 是一种更紧凑、更合适的解决方案。

于 2012-11-28T21:39:41.197 回答