我有一个Android服务,每5分钟从服务器获取一次更新。屏幕打开时效果很好,但是当它关闭时似乎暂停。请记住,服务使用start foreground()在前台运行。
我目前正在创建一个新线程并让它睡眠以便每5分钟运行一次更新,是否有更好的方法可以让计时器在设备休眠时仍然运行?
答案 0 :(得分:1)
更新未发生,因为手机将在您关闭屏幕时进入睡眠状态。如果打开“优化WiFi”模式,则会更频繁地发生在WiFi上。
你应该看看wakelocks。获取唤醒锁,以防止设备入睡。释放它让它再次入睡。请注意,这显然会增加电池消耗。
答案 1 :(得分:1)
通过AlarmManager使用警报。警报将唤醒CPU,允许您进行处理。如果您只是等待线程中的睡眠,则如果手机处于关闭状态(处于睡眠模式),则不会被唤醒。
当然,您需要一个后台线程或任务来进行实际下载。这就是唤醒锁进入的地方。当闹钟响起时,请求唤醒锁。完成检查/下载后,将其释放。对于您的情况,您可以保持相同的架构 - 而不是等待重新检查,等待信号量的5分钟睡眠。当警报进来时,请求唤醒锁并发信号通知信号量。检查完成后,释放唤醒锁和信号量,然后再次等待。