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或移动数据连接是否会进入休眠状态?
屏幕打开时,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网络,或者对设备上的设置大惊小怪(例如,将其置于飞行模式)
等等.
如果这是某种工业过程监视器或信息亭设备,你完全控制这些东西的几率是不错的但不是很好.你得到的远不止这些,这些东西的可能性很快就会停滞不前.
你有什么参考吗?
在一个理想的世界里,所有这一切都将被完美地记录下来,所有人都会有和平,海莉·阿特威尔会认为我是一个体面的家伙.
这不是一个理想的世界.
这些东西不仅很大程度上没有记录,而且还取决于设备制造商.这就是为什么如果这不是一个非常受控的环境,而欢迎你尝试这种行为,现实世界非常混乱,你不应该假设你可以无限期地保持连接打开.
| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |