在不耗尽电池的情况下保持服务清醒

时间:2012-04-19 17:32:15

标签: android android-service alarmmanager

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

我搜索的解决方案是使用AlarmManager使其保持清醒状态。但据说这会耗尽设备的电池。 那么,还有另一种方法吗?

例如,像Whatsapp和Skype这样的应用程序有什么作用?他们似乎没有杀死太多的电池,但他们一直在不断地运行服务吗?

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

2 个答案:

答案 0 :(得分:2)

  

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

这无济于事。设备进入睡眠状态后,您的套接字连接将被终止。您需要使用部分WakeLockWifiLock来持续开启设备。

  

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

WakeLockWifiLock肯定会耗尽电量。

  

那么,还有另一种方法吗?

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

  

例如,像Whatsapp和Skype这样的应用程序做什么?

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

最好的答案是切换到使用C2DM。

答案 1 :(得分:2)

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