5

使用我的 Android 应用程序,当用户执行某个操作时,会启动一个后台服务,该服务会获取当前 GPS 位置并将其保存在数据库中,此外还会执行一些其他操作。在该服务中,我使用类中requestLocationUpdates()LocationManager并等到onLocationChanged()我的LocationListener(由服务实现)被触发。但是等待onLocationChanged开火的最佳方法是什么?我应该简单地轮询一个变量并等到它被设置吗?有小费吗?

onLocationChanged()注意:由于其他一些东西,我不能简单地写入数据库。

编辑:为了澄清我的情况,我可以举一个类似于我的例子的例子:假设用户按下一个按钮并myMethod触发一个方法,该方法将返回一些对象。然后,在这个 myMethod 中,我将注册来自 GPS 的位置更新(使用requestLocationChanged),此外还等待用户位置并将其用于某些事情。换句话说,myMethod在该位置出现之前不能返回。onLocationChanged我不知道在这种情况下如何使用。

4

4 回答 4

3

设置位置后,将触发 onLocationChanged,因此您无需轮询任何变量。为什么不能在 onLocationChanged 中保存位置?

于 2010-04-06T14:24:03.027 回答
0

我认为您应该使用等待/通知方法。你应该有一些锁定对象。您在方法中调用 lockObject.wait() 。然后在 onLocationChanged 中调用 lockObject.notify()。这样,在收到 onLocationChanged 之前,您的方法不会返回。

实际上,更好的解决方案是审查您的设计并尽可能使您的方法异步。

于 2010-04-06T16:18:36.523 回答
0

根据我对问题的理解和阅读评论,我建议您使用类的初始getLastKnownLocation()位置LocationManager。也报名参加onLocationChanged活动。现在你可以在这个事件处理函数中做任何你想做的事情,同时在前端进行。此外,如果您需要当前位置,您可能需要等待requestLocationUpdates()回复。在您的应用程序准备某些任务时让用户等待可能不是一个好主意。正如其他人所建议的,您可以在此处使用进度条。

于 2012-08-31T04:34:20.337 回答
0

我所做的是将主屏幕上的视图设置为不确定长度的进度条,设置 requestLocationUpdates() 并返回给用户。如果您需要在解决位置之前阻止用户,那么您可以在您的活动顶部打开一个对话框,该对话框没有控件和进度条视图。然后在您的 onLocationChanged 回调中,您可以关闭该对话框并继续您的业务。

编辑:我再次阅读了你的问题,我想我理解得更好。我的第一个建议是看看你是否可以取消你的后台服务。您不必担心应用程序在等待 GPS 锁定时变得无响应,因为 GPS API 是异步的。如果由于某种原因您不能,那么您将不得不查看消息传递 API,以允许您的后台服务在 GPS 数据可用时向您的主 Activity 发送消息。请参阅开发人员指南

于 2010-04-06T14:28:17.277 回答