当屏幕开启时,Wi-Fi或CPU能否进入睡眠状态?

22

在Android上有WakeLockWifiLock--但是如果我的屏幕从不关闭,我需要这些吗?

我使用持久连接(例如WebSockets)长达数十分钟甚至数小时。假设连接保持可用且服务器正常,那么我的屏幕始终开启是否足以防止设备丢失这些连接?

为了保持屏幕常亮,我使用标准方法:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

文档中的说明:

为了避免电池过度消耗,处于空闲状态的Android设备会快速进入睡眠状态。

(https://developer.android.com/training/scheduling/wakelock.html)

通常情况下,当用户长时间未使用设备时,Wi-Fi无线电可能会关闭。

(http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html)

这是否意味着当用户长时间不与设备交互时(即使屏幕仍然开着),Wi-Fi无线电或CPU可能会进入睡眠模式或关闭?
更具体地说,当仍有一个Activity保持屏幕开启时,后台任务(例如IntentService)的Wi-Fi或移动数据连接是否可能进入睡眠状态?
2个回答

7
当屏幕开着时,Wi-Fi或CPU可以进入睡眠状态吗?
不行。
Android上有WakeLocks和WifiLocks,但是如果我的屏幕从未关闭,我是否需要它们?
我不太清楚您的屏幕从未关闭是怎么实现的。总之,据我所知,WakeLock总是会被涉及到的。无论您是否需要WakeLock,还是该WakeLock由框架类(例如android:keepScreenOn)或操作系统(例如保持屏幕亮的设置选项)管理,这取决于您在做什么。
我从未见过Android设备在屏幕开着(而不是在锁定屏幕时)时关闭WiFi。我不能排除某些制造商的极限省电模式下会由于低电量状况而关闭WiFi的可能性。
一直亮着的屏幕是否足以防止设备丢失连接(假设连接仍然可用并且服务器正常)?
我更倾向于表达为“保持屏幕亮起将有所帮助”。或者更好的是,让设备进入睡眠模式通常会断开您的WiFi连接。
要保持屏幕长亮,我使用标准方式:getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这意味着您正在使用一个WakeLock。巧合的是,它是由系统为您管理的,而且由于您无法破坏它,因此您不需要WAKE_LOCK权限。
当用户较长时间不与设备交互时(即使屏幕仍然开着),Wi-Fi电台或CPU是否会进入睡眠模式或关闭?
对于普通设备,不会。我不能排除某些制造商采用一些电子墨水技术导致具有该行为的可能性。
更具体地说,当存在保持屏幕常亮的活动时,后台任务(例如IntentService)的Wi-Fi或移动数据连接是否会进入睡眠模式?
不应该如此。特别是,移动数据连接永远不会进入睡眠状态。
所有这些都是在假设这是一个完全受控制的环境下进行的,否则您所做的可靠性将会很差。您在做出了很多假设:
- 某种永久电源 - 没人打扰设备以将您的活动移至后台或按下BACK按钮将其退出 - 没有人对WiFi网络造成干扰,也没有人对设备进行设置(例如将其置于飞行模式) - 等等
如果这是某种工业过程监视器或嵌入式设备,你能够完美地控制它们的可能性还可以,但并不是很大。如果超出了这个范围,这些设备能够持久运行的可能性会迅速降低。

你有参考资料吗?

在理想的世界里,所有这些都将被完美记录,人类和平相处,海莉·阿特维尔(Hayley Atwell)会认为我是一个体面的家伙。

然而,这不是一个理想的世界。

这些东西大部分都没有得到充分的记录,因此完全取决于设备制造商。因此,如果这不是一个非常受控制的环境,虽然你可以尝试获取这种行为,但现实世界非常混乱,你不应该假定你可以无限期地保持连接。


1

谢谢。这基本上就是我在问题中写的内容和假设。你有任何参考资料吗?否则,这并没有推动话题向前发展。 - caw
更新的答案附带参考链接。如果想深入了解,请查看Android电源管理http://www.slideshare.net/jerrinsg/android-power-management。 - lazy lord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接