2012-07-21 105 views
1

我注册了一个location listener,它将使用NETWORK_PROVIDER接收位置更新。如果activity处于前景中,侦听器会收到位置更新。如果我离开应用程序,过了一段时间,它会停止接收位置更新。这有点奇怪......即使没有任何活动在堆栈上,它是不是应该接收位置更新?如果我回到我的应用程序,监听器再次开始接收位置更新。Android LocationListener停止接收位置更新

或者我做错了什么?即使我的任何活动都未处于活动状态(无论是在前台还是在堆栈中),建议使用哪种编程模型来接收位置更新?

还有其他一些方法可以接收位置更新(使用未决意图),但如果我不打开GPS,则不会触发。

+0

如果您想要在活动休眠时接收位置,则需要唤醒锁和服务。 – Shine 2012-07-22 01:20:04

+0

你的意思是我应该写一个服务?该服务应实现LocationListener? 你是什么意思的唤醒锁? 任何链接或您提到的例子? – 2012-07-22 01:30:38

+0

我读过关于唤醒锁。我不想要唤醒锁。因为我不想让设备醒来。该设备的行为正常。用户应该能够锁定屏幕,如果他想。 让听众获得服务会更有意义。但我不确定这是否是正确的做法。 – 2012-07-22 01:38:06

回答

2

在后台的活动将最终被破坏,你没有任何保证,一旦停止它将继续接收位置更新。 Android中的活动不应该像这样使用。

您可以按照建议使用带唤醒锁的服务,但保持设备清醒状态将快速耗尽电池电量。

我推荐你由Reto Meier(IO 2011)的this talk,他在那里谈论不同的策略以获得一个新的位置。这里是the code

+0

感谢您与视频的良好关联。谈话中涵盖了很多重要的话题。关于接收位置更新的部分是从大约20分50秒到26分00秒。 – 2013-01-06 16:30:54