Java 试图了解我是否需要WakeLock
免责声明:我的应用程序已经在没有任何唤醒锁的情况下运行了1年多,并且对于大多数设备来说一切正常 我正在跟踪GPS,它的工作原理如下:Java 试图了解我是否需要WakeLock,java,android,Java,Android,免责声明:我的应用程序已经在没有任何唤醒锁的情况下运行了1年多,并且对于大多数设备来说一切正常 我正在跟踪GPS,它的工作原理如下: AlarmReceiver每5/10/15分钟启动一次服务(如用户所愿) 服务订阅位置更新,并最多等待1分钟以获得良好的GPS 结束,将数据发送到服务器并关闭服务 由于不良连接和不良位置-整个过程有时需要2-3分钟。它是有效的。无论手机是否处于睡眠状态 现在我在读关于WakeLock的书,但我觉得它毫无意义。我的东西怎么会起作用?这是巧合吗 很好地阅读文档 报警管
广播接收器的onReceive()
期间保持唤醒锁
至少在某些版本的Android上,请求GPS更新可能会导致操作系统获得自己的WakeLock
。这是一种无证行为,我个人从未依赖过。但是,如果确实如此,并且您正在删除位置更新之前完成其余工作(“打包,将数据发送到服务器并关闭服务”),这将解释这种行为
在您的方法中仍然存在潜在的差距(例如,如果您将工作委托给服务
,并且没有持有唤醒锁
,作为向该服务传递控制权的一部分)。从统计上讲,它可能偶尔会失败,但在很多时候都会起作用
就个人而言,我建议使用唤醒锁
,以防未记录的行为发生变化 啊,是的,经典问题。“有效,但……不应该?”嗯……)实际上,在调用AsyncTask之前,我会删除更新。但我确实订阅了异步任务更新和完成服务。大约要进行5次HTTP调用,因此在调用removeUpdates
后至少要花费5秒钟以上的时间。事实上,我希望你能回答,因为我考虑过切换到你的WakefulIntentService
,因为这更像是我所做的。@katit:WakefulIntentService
不适用于必须持续时间超过doWakefulWork()
的工作,例如从LocationManager
异步接收位置。“wakeful”属性是好的,但IntentService的基础不是好的。这就是为什么我写了LocationPoller
,作为不同服务中相同“唤醒”概念的一个例子。