繁体   English   中英

android背景位置更新和唤醒锁

[英]android background location updates and wakelock

我正在开发一个Android应用程序,我需要使用GPS提供程序在后台长时间获取位置更新,所以我需要在用户不再与之交互时发生位置udates。 我对自己比较的LocationManager的requestSingleUpdate(提供者,pendingIntent版本)和requestLocationUpdates(provider,minTime,minDistance,intent版本)进行了一些测试。 在我的Droid Razr HD上获取了大量数据之后,看起来使用requestLocationUpdates比requestSingleUpdate明显更可靠(对于这两种方法,我实际比较了报告到实际位置的GPS位置,即未使用报告的准确度,以及requestLocationUpdates不仅对我的实际位置更加准确,而且它返回的位置修复时间与使用requestSingleUpdate选项的当前时间相同。 我知道如何使用带有重复警报的AlarmManager并调用requestSingleUpdate,这样我每次警报响起时只需要一个唤醒锁,但是由于使用requestLocationUpdates的准确性提高(至少在我的手机测试中)我我想用这种方法代替。 我的问题是,如果我使用requestLocationUpdates方法,我真的不清楚我必须做什么来保持唤醒锁定,以便在用户不与手机交互时保持更新。 我从一个从服务启动的单独线程调用requestLocationUpdates(我读到这是标准模式)。 我的问题是,我是否必须在整个时间内持有唤醒锁,我希望位置更新继续进行? 如果我没有获得自己的唤醒锁,那么位置更新会不断进行,每次更新都会唤醒手机吗? 如果这是真的,那么这些更新是否会创建自己的唤醒锁,如果是,那么它们何时会释放唤醒锁? 我似乎无法就此找到明确的答案。 任何帮助是极大的赞赏。

不,你不需要唤醒锁,因为操作系统为你取代了唤醒锁( 代码 )。 onLocationChange()结束或广播接收器收到意图(对于接口的意图版本onLocationChange()时,将释放onLocationChange() 如果您在onLocationChange()启动某些异步工作,例如使用其他线程,则需要您自己的唤醒锁。

我写了一个飞行记录应用程序,它还需要每隔几秒更新一次以识别接听和着陆。 在服务中评估接收的数据。 为了使服务保持活跃,您需要一个WakeLock。 当检测器(自动识别相关事件)启动时我得到锁定,当用户关闭检测器时我解除锁定; 这也是服务的生命周期,因此锁定在onCreate中获取并在onDestroy中释放。 我使用SCREEN_DIM_WAKE_LOCK来节省一些电量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM