0

我有这个问题,我正在创建一个作为服务在后台运行的应用程序。我已经设法使它持久化并在启动时运行,这是我需要的。现在我有这样的情况:

在此服务中,我启动了一个线程-> 在此线程中,我想启动一个意图服务以从 GPS(位置)收集数据。这似乎很容易。

我遇到的问题是将通过 Intent Service 收集的位置返回到该线程。

我发现了很多关于在活动和服务之间传递数据的问题,但没有关于服务和线程的问题。

我当然可以将 Intent Service 嵌套在我的主服务中,并从 Intent Service 更改服务变量,检查它是否已在循环中更改。但这似乎效率很低-我宁愿以其他方式进行。

因此我想问一下如何实现它?

提前致谢

4

1 回答 1

1

在此服务中,我启动了一个线程-> 在此线程中,我想启动一个意图服务以从 GPS(位置)收集数据。这似乎很容易。

并不真地。

我遇到的问题是将通过 Intent Service 收集的位置返回到该线程。

那么你做错了。

AnIntentService对于获取位置修复毫无用处。定位修复立即可用(在这种情况下,这IntentService是不必要的),或者定位修复仅在未来的某个任意时间可用(在这种情况下,IntentService很久以前就会关闭,从而阻止您获得修复首先可靠)。

如果您LocationClient从 Play Services SDK 使用,只需从主服务中的线程获取位置。

如果您正在使用LocationManager(例如,您坚持必须使用 GPS,而不是 使用的“融合位置提供程序” LocationClient),您将需要重写您的应用程序以避免阻塞直到位置可用逻辑。相反,使用事件驱动编程,requestLocationUpdates()在这些位置到达时使用和处理它们。您可以使用与您创建requestLocationUpdates()的 aLooper绑定的that 的变体HandlerThread,以便能够在后台线程中处理这些修复。

于 2013-09-20T17:30:16.247 回答