试着了解我是否需要WakeLock

时间:2012-07-26 23:00:36

标签: java android

免责声明:我的应用程序在没有任何唤醒锁定的情况下已经工作了1年以上,并且一切都适用于大多数设备。

我正在跟踪GPS,它的工作原理如下:

  1. AlarmReceiver每5/10/15分钟启动一次服务(按照用户的意愿)
  2. 服务订阅位置更新,并等待MAX 1分钟以获得良好的GPS。
  3. 总结,发送数据到服务器并关闭服务。
  4. 由于连接不良和位置不好 - 整件事有时需要2-3分钟。它有效。无论手机是否正在睡觉。

    现在我正在阅读WakeLock,这对我来说没有意义。为什么我的东西工作?这是巧合吗?

2 个答案:

答案 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更容易,效率更高。

基于此......我认为它目前有效是有意义的;如果我错了,请纠正我。