屏幕打开时,Wi-Fi或CPU是否可以进入睡眠状态?

时间:2014-12-11 07:43:23

标签: android android-lifecycle android-networking

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可能会进入睡眠模式或关闭?

更具体地说,当仍有IntentService保持屏幕开启时,后台任务(例如Activity)Wi-Fi或移动数据连接是否可以进入休眠状态?

2 个答案:

答案 0 :(得分:6)

  

屏幕开启时,Wi-Fi或CPU是否可以进入休眠状态?

没有

  

Android上有WakeLocks和WifiLocks - 但如果我的屏幕永远不会关闭,我是否需要这些?

我不太清楚你的屏幕永远不会关闭。在一天结束时,AFAIK,WakeLock总是参与其中。 是否需要WakeLockWakeLock是否由框架类(例如android:keepScreenOn)或操作系统(例如,设置选项以保持屏幕)来管理on),取决于你在做什么。

我从未见过Android设备在屏幕开启时关闭WiFi(而不是锁定屏幕)。我不能排除在某些制造商极端省电模式下由于电池电量不足而导致WiFi掉电的可能性。

  

我的屏幕是否始终足以防止设备丢失这些连接(如果我们假设连接仍然可用且服务器正常)?

我会更多地将其称为“保持屏幕开启将有所帮助”。或者,更好的是,让设备进入睡眠模式通常会丢弃您的WiFi连接。

  

为了保持屏幕开启,我使用标准方式:getWindow()。addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

这意味着您正在使用WakeLock。碰巧它是为您管理的,并且由于您无法搞砸,您不需要WAKE_LOCK权限。

  

当用户长时间不与设备交互时(即使屏幕仍处于开启状态),Wi-Fi无线电或CPU可能会进入睡眠模式或关闭?

对于普通设备,没有。我不能排除某些制造商在做某种可能有这种行为的电子墨水的事情。

  

更具体地说,当仍然存在保持屏幕开启的活动时,后台任务(例如IntentService)的Wi-Fi或移动数据连接是否会进入休眠状态?

不应该。特别是,移动数据连接从不进入休眠状态。


所有这一切,除非这是一个完全受控制的环境,否则你所做的事情的可靠性会很糟糕。你做了很多假设:

  • 某种永久性电源

  • 没有人弄乱设备将活动移到后台或后退按钮

  • 一般情况下,没有人搞乱WiFi网络,或者设备上的设置都很乱(例如,将其置于飞机模式)

如果这是某种工业过程监视器或信息亭设备,那么你完全控制这些东西的几率是不错的但不是很好。你得到的远不止这些,这些东西的可能性很快就会停滞不前。


  

你有参考吗?

在一个理想的世界里,所有这一切都将被完美记录,所有人民都会有和平,而海莉·阿特维尔会认为我是一个体面的家伙。

这不是一个理想的世界。

这些东西不仅没有大量记录,而且还取决于设备制造商。这就是为什么如果这不是一个非常受控制的环境,而欢迎你尝试这种行为,现实世界非常混乱,你不应该认为你可以保持连接打开下去。

答案 1 :(得分:1)

如果屏幕打开,那么cpu将不会进入深度睡眠状态。标志保持屏幕是更智能的方式来保持屏幕而不是唤醒锁定,以节省电池寿命。通过以下链接阅读 在那读了Hackborns先生的评论

https://groups.google.com/forum/#!searchin/android-developers/flag_keep_screen_on$20wake$20locks/android-developers/Tg7_sUL8Ec4/sI6ayb5yzigJ

Wifi在系统中有其睡眠策略选项 - > wifi-> advance。如果它始终打开,那么它将不会进入睡眠模式。