在 android 服务的单独线程中运行位置更新

Posted

技术标签:

【中文标题】在 android 服务的单独线程中运行位置更新【英文标题】:Running location update in a separate thread in android service 【发布时间】:2012-03-15 11:57:36 【问题描述】:

我在决定我应该如何实现我的后台服务任务时有点困惑。以下是我的服务的样子。

android 服务(后台有两个任务要做)

    注册 locationListener 并在收到新位置时进行处理以确定最佳位置。

    每 10 分钟轮询一次服务器以检查远程数据库是否有任何服务器端更改。

现在我不希望这两个任务争夺时间和资源。所以我打算同时运行这两个。对于轮询服务器,我正在使用重复的 timerTask,但对于 LocationListener,我应该使用什么?

是否可以使用 java runnable 以某种逻辑处理新位置并将位置更新到服务器?如果我的想法没问题,请提供一些示例代码来展示如何在新线程中执行位置更新。

如果您认为我目前的想法有任何问题,请根据我的要求提出一些新的建议。

【问题讨论】:

【参考方案1】:

我看不到任何内容,这表明您无法在文档中注册在您的服务中运行的 LocationListener: http://developer.android.com/reference/android/location/LocationListener.html http://developer.android.com/guide/topics/location/obtaining-user-location.html

这是一个带有答案的类似问题,您应该阅读它: Android service with locationListener callbacks

“现在我不希望这两个任务争夺时间和资源。所以我打算同时运行这两个。” ^ 含糊的陈述,随后是一个看似违反直觉的计划。如果您能具体说明“时间”和“资源”的含义,那么您可能会得到一些有用的反馈。

简短回答: 是的。注册一个 LocationListener,它会在位置更新可用时被调用。它是一个 LISTENER,因为无论您将其注册到什么位置,它都会在需要时被调用——您不需要自己调用它。最佳做法是不要在 TimerTask 上重复,而是使用由每次滴答调用的代码重置的一次性。

至于免费代码,也许您应该聘请某人为您完成艰苦的工作?它将在 Android 社​​区中创造另一份工作,并减轻您尝试不精通的事情所涉及的风险。否则,请动手并尝试以您认为最好的方式实施它,回到如果/当您遇到特定问题时,堆栈溢出。

【讨论】:

straya:感谢您的回复。但是从您的回答看来,您认为任务和位置更新任务是相同的。目前我没有将 TimerTask 用于位置。但是计时器任务用于从远程网络服务器获取一些数据库更新。可能是在运行 timerTask 时调用了我的位置侦听器。这就是为什么我想实现线程。如果您可以评论我的新澄清..这将对我有所帮助... 不,我认为它们不一样。如果您认为这就是我根据我所写的内容所想的,那么您这边有问题。重读我说的很仔细。注册监听器,让它做它的事。设置 TimerTask,让它做它的事。如果他们“同时”运行,你在乎什么(让我觉得你在隐瞒重要信息......)

以上是关于在 android 服务的单独线程中运行位置更新的主要内容,如果未能解决你的问题,请参考以下文章

从服务访问android位置?

TCP 服务和 REST API

android-如何在与主线程不同的线程中运行服务?

Android 服务未收到位置更新

Android Service 和线程中运行的重复性任务

在多线程中,子线程更新主线程ui都有哪些方法及注意点