15

我有一个通过 WiFi 发送网络数据的应用程序。一切都很好,直到我关闭显示器或设备进入“睡眠”状态。但是,我已经锁定了 WiFi,似乎是 CPU 速度在睡眠时下降,这导致我的流无法正常运行(即数据包的流动速度不如我想的那样快)设备未休眠)。

我知道我可能/可能应该在协议级别解决这个问题,但是,这也可能是不可能的......

什么办法可以“防止屏幕关闭时CPU进入'睡眠'”?如果是这样,怎么做?如果没有,无论设备是否处于睡眠模式,有关如何保持 WiFi 流速度一致的任何建议?

4

2 回答 2

13

从 PowerManager 中获取 PARTIAL_WAKE_LOCK。您还需要将WAKE_LOCK权限添加到清单中。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Tag"); 
wl.acquire();
//do what you need to do
wl.release(); 
于 2011-10-01T01:13:53.757 回答
11

好的,所以,经过更多的研究和试验,似乎真正的问题是,至少在某些手机上,即使您已锁定WiFi,它们的 WiFi 也会进入“部分睡眠”模式。似乎这就是在获取 WiFi 锁定时发明的“WIFI_MODE_FULL_HIGH_PERF”标志......不幸的是,这个标志仅在某些设备/Android 版本上可用(我不知道是哪个,但它不可用对我来说)。因此,它并不是对所有设备的修复。

唯一的“解决方案”(实际上是一个杂项)似乎是“检测屏幕何时关闭,然后设置警报,然后立即重新打开屏幕”。对此有所帮助的链接是:

手机休眠后如何让任务保持活力?

http://android.modaco.com/topic/330272-screen-off-wifi-off/

我希望这可以帮助那些在手机进入睡眠/屏幕关​​闭时遇到 WiFi 中断的人(并且手机被拔下/断开连接[例如,当连接到 adb 时你不会看到这种效果;只有在手机运行时没有任何关联])。

于 2011-10-11T16:30:20.810 回答