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

caw*_*caw 21 android android-networking android-lifecycle

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

我使用持久连接(例如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或移动数据连接是否会进入休眠状态?

Com*_*are 6

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

没有.

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

我不太清楚你的屏幕永远不会关闭.在一天结束时,AFAIK WakeLock总是参与其中.无论您是需要WakeLock还是WakeLock由框架类(例如android:keepScreenOn)或OS(例如,设置选项以保持屏幕开启)管理,都取决于您正在做什么.

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

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

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

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

这意味着你正在使用一个WakeLock.碰巧它是为你管理的,因为你无法搞砸,你不需要WAKE_LOCK许可.

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

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

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

它不应该.特别是,移动数据连接永远不会进入休眠状态.


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

  • 某种永久性电源

  • 没有人搞乱设备将您的活动移动到后台或BACK按钮

  • 一般来说,没有人搞乱WiFi网络,或者对设备上的设置大惊小怪(例如,将其置于飞行模式)

  • 等等.

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


你有什么参考吗?

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

这不是一个理想的世界.

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