-2

@commonsware首先让我感谢您为这个社区提供的所有帮助,我发誓我在谷歌上搜索的大多数问题都是公认的答案。

无论如何,在我开始使用locationpoller后有几个问题

另一篇文章所述,一旦我启动您的投票服务,我偶尔会得到以下信息:

03-07 15:42:03.260: W/MessageQueue(14699): Handler (android.location.LocationManager$ListenerTransport$1) {419425f8} sending message to a Handler on a dead thread

这仍然是一个问题吗?我不知道这是否只是位置管理器搞砸的事情,可能是超时处理程序

接下来是我创建这篇文章的主要关注点:

作为目的地感知导航类应用程序的一部分,我需要在他们的屏幕关闭时跟踪用户,并且由于某种原因,它在进入地下一段时间后没有醒来。

我在没有网络的情况下也得到了一些奇怪的测试结果。现在我按照你的建议开始服务

Intent i=new Intent(this, LocationPoller.class);
i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(this, LocationReceiver.class)); i.putExtra(LocationPoller.EXTRA_PROVIDER, LocationManager.NETWORK_PROVIDER);

一切似乎都如您所记录的那样工作,PollerThread#onPreExecute()每次打开飞行模式进行测试时都会被调用,然后永远不会结束,2分钟后,我的接收器终于在onTimeout Runnable触发时收到通知。

然后当我再次关闭飞行模式时,一切似乎恢复正常,我的接收器最终又赶上了。

我的问题是,当我在现实世界中进行测试,乘地铁回家但让应用程序和服务保持运行时,一旦我在地面上重新连接,我似乎无法在日志中找到服务继续运行的任何痕迹,而且我的接收器,它使用另一个唤醒锁来重新打开屏幕/在靠近目的地时发送通知,直到我重新打开我的应用程序才被触发

长话短说 - 这是图书馆的问题吗?位置管理器如何工作的问题?你有什么更好的方法来测试这个而不是仅仅使用飞行模式吗?

地上,骑自行车,开车等,一切似乎都很好,但是一旦我介绍了地铁,我失去了所有的连接,狗屎停止工作,我只是不知道 locationmanager 的细节来理解为什么服务似乎停止

免责声明这个应用程序不适合地铁上的人,但我只是不确定(没有任何方法可以测试)用户是否在偏僻的地方并且失去了网络连接我希望他们也不会失去跟踪(因为他们可以根据设置选择仅使用网络提供商或 gps)

4

1 回答 1

2

这仍然是一个问题吗?

我不知道。如果您可以创建一个可重现的测试用例来证明这一点,请将问题发布到项目的问题跟踪器。

我的问题是,当我在现实世界中进行测试,然后乘坐地铁回家但让应用程序和服务保持运行时,一旦我在地面上重新连接,我似乎无法在日志中找到服务继续运行的任何痕迹

该服务不应该“继续”。该服务将尝试片刻以获取位置修复,然后在发送超时消息后关闭。您可以通过AlarmManager或类似方式进行实际的“轮询”。

引用文档:

您只需设置一个 AlarmManager 警报,以您希望的任何频率联系 LocationPoller,它将从那里处理所有定位工作,通过广播 Intent 向您发送结果......接下来,您需要通过 AlarmManager 创建一个警报,因此您可以控制检索位置的频率以及是否应在设备处于睡眠状态时唤醒设备。请不要频繁请求位置更新,因为这会耗尽用户的电池电量,尤其是在您使用 GPS 时。

因此,您的第一步是确定您的警报是否正常工作。您可以使用它adb shell dumpsys alarm来检查已注册的警报并查看发生了什么。

于 2013-03-07T21:52:58.053 回答