Android上有WakeLock
和WifiLock
- 如果我的屏幕永远不会关闭,我是否需要这些?
我使用持久连接(例如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或移动数据连接是否可以进入休眠状态?
答案 0 :(得分:6)
屏幕开启时,Wi-Fi或CPU是否可以进入休眠状态?
没有
Android上有WakeLocks和WifiLocks - 但如果我的屏幕永远不会关闭,我是否需要这些?
我不太清楚你的屏幕永远不会关闭。在一天结束时,AFAIK,WakeLock
总是参与其中。 你是否需要WakeLock
或WakeLock
是否由框架类(例如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先生的评论
Wifi在系统中有其睡眠策略选项 - > wifi-> advance。如果它始终打开,那么它将不会进入睡眠模式。