3

我有一个应用程序需要通过 wifi 持续监听传入的请求。在后台运行的服务会完成这项工作。但是,当屏幕关闭时,此服务会在一段时间后进入休眠状态。

我搜索的解决方案是使用 AlarmManager 保持清醒。但据说这会耗尽设备的电池。那么,还有其他方法可以做到这一点吗?

例如,Whatsapp 和 Skype 等应用程序是做什么的?它们似乎不会消耗太多电池,但它们可以持续运行服务,对吗?

此外,如果 AlarmManager 是唯一的方法,如果有人可以分享一个教程或示例,那将是非常好的。

4

2 回答 2

2

我搜索的解决方案是使用 AlarmManager 保持清醒

那将无济于事。一旦设备进入睡眠状态,您的套接字连接将被终止。您需要使用部分WakeLock加 aWifiLock来保持设备持续开机。

但据说这会耗尽设备的电池。

并且肯定WakeLockWifiLock耗尽电池。

那么,还有其他方法可以做到这一点吗?

如果您需要使用 WiFi,则不需要。

例如,Whatsapp 和 Skype 等应用程序是做什么的?

当设备想要进入睡眠状态时,他们不使用 WiFi。一旦 WiFi 无线电断电,它们就会使用移动数据,因此WifiLock不需要。对于移动数据,传入的数据包将唤醒设备,因此您只需要一段WakeLock时间即可实际工作,而不是不断地工作。

不过,最好的答案是改用 C2DM。

于 2012-04-19T17:38:05.757 回答
2

实际上,进入睡眠状态的不是您的服务,而是您设备上的 WiFi 单元。HTC 等制造商(或者可能是所有 Android 设备)已经在他们的设备上实施了这种行为,其中 WiFi 单元在屏幕关闭一段时间后进入待机状态。这有助于设备在不使用时节省电池。

于 2012-04-19T17:38:30.763 回答