不,不是的。更多(非常好的)信息在这里,包括可能的解决方案/黑客。
关于 1,我必须做出有根据的猜测,并说这不会有什么不同
据我所知,您使用哪个提供商进行更新LocationManager.NETWORK_PROVIDER
或LocationManager.GPS_PROVIDER
.
冒着有点 OQ 的危险,我有点好奇哪种应用程序需要获取唤醒锁以保持服务运行。据我所知,拥有唤醒锁并不能确保您Service
继续运行。确保 a 持续运行的唯一Service
方法是将其置于前台 ( Service.startForeground()
)。否则系统仍然可能终止服务,无论它是否获得了唤醒锁。话虽如此,如果它正在运行,它可以与 aHandler
或其他东西一起工作。
如果您正在使用这种方法,并且我认为您是基于场景的,我建议您不要这样做。基本上,您正在创建一项服务,让它在前台运行(猜测),并且您正在获取唤醒锁定只是为了在屏幕关闭时请求位置更新。这似乎有点矫枉过正。
有一种更有效的方法,它的好处是它比可怕的时间更准确的时间Handler.postAtTime
or Handler.postDelayed
: AlarmManager.setRepeating()
。将类型设置为 ELAPSED_REALTIME_WAKEUP 或 RTC_WAKEUP 以便在设备休眠时运行,然后当BroadcastReceiver
您必须创建的警报事件被触发并接收时,您可以请求更新并处理其他事件。
如果您不使用Handler
,而只是请求位置更新,那么这种方法可能仍然会更好,因为它不需要您运行Service
或获取唤醒锁。
这似乎LocationManager.addProximityAlert()
是去这里的方式。这也是有缺陷的(见1)
顺便说一句,这里有类似的问题:Android:手机睡眠时 GPS 位置更新?