我有一个需要通过wifi连续监听传入请求的应用程序。在后台运行的服务可以完成这项工作。但是,当屏幕关闭一段时间后,此服务就会入睡。
我搜索的解决方案是使用AlarmManager使其保持清醒状态。但据说这会耗尽设备的电池。 那么,还有另一种方法吗?
例如,像Whatsapp和Skype这样的应用程序有什么作用?他们似乎没有杀死太多的电池,但他们一直在不断地运行服务吗?
此外,如果AlarmManager是唯一的方式,如果有人可以分享教程或示例,那将非常友好。
答案 0 :(得分:2)
我搜索的解决方案是使用AlarmManager使其保持清醒
这无济于事。设备进入睡眠状态后,您的套接字连接将被终止。您需要使用部分WakeLock
加WifiLock
来持续开启设备。
但据说这会耗尽设备的电池。
WakeLock
和WifiLock
肯定会耗尽电量。
那么,还有另一种方法吗?
如果您需要使用WiFi,则不会。
例如,像Whatsapp和Skype这样的应用程序做什么?
当设备想要进入睡眠状态时,它们不使用WiFi。一旦WiFi无线电关机,它们就会使用移动数据,因此不需要WifiLock
。对于移动数据,传入的数据包将唤醒设备,因此您在实际工作时只需要WakeLock
,而不是经常工作。
最好的答案是切换到使用C2DM。
答案 1 :(得分:2)
实际上它不是你的服务,它是你设备上的WiFi设备。像HTC(或者可能是所有Android设备)这样的制造商已经在他们的设备上实现了这种行为,其中WiFi单元在屏幕关闭的一段时间后进入待机状态。这有助于设备在不使用时节省电量。