免责声明:我的应用程序在没有任何唤醒锁定的情况下已经工作了1年以上,并且一切都适用于大多数设备。
我正在跟踪GPS,它的工作原理如下:
由于连接不良和位置不好 - 整件事有时需要2-3分钟。它有效。无论手机是否正在睡觉。
现在我正在阅读WakeLock,这对我来说没有意义。为什么我的东西工作?这是巧合吗?
答案 0 :(得分:1)
我的东西怎么样?
一系列事物,包括一团幸运。 : - )
首先,正如Joel所说,设备会因您的警报而短暂唤醒,但操作系统只保证在WakeLock
onReceive()
期间保持BroadcastReceiver
。
至少在Android的某些版本上,请求GPS更新可能导致操作系统获得自己的WakeLock
。这是AFAIK的无证行为,我从未亲自依赖它。但是,如果它确实如此,并且您正在完成剩余的工作(“总结,将数据发送到服务器并关闭服务”),然后再删除位置更新,这将解释该行为。
您的方法仍然存在潜在的差距(例如,如果您委托Service
进行工作,并且没有将WakeLock
作为将控制权传递给该服务的一部分。从统计学上讲,它可能会偶尔失败,但很多时候都会工作。
就个人而言,我建议使用WakeLock
,以防未记录的行为发生变化。 That's what I do in LocationPoller
答案 1 :(得分:0)
好好阅读AlarmManager文档..
只要报警,报警管理器就会保持CPU唤醒锁定 接收者的onReceive()方法正在执行。
...进一步
注意:警报管理器适用于您想要的情况 即使您的应用程序,您的应用程序代码也会在特定时间运行 目前没有运行。对于正常的计时操作(刻度, 超时等)使用Handler更容易,效率更高。
基于此......我认为它目前有效是有意义的;如果我错了,请纠正我。