我有一个应用程序,我通过WiFI发送网络数据。一切都很好,直到我关闭显示器或设备进入“睡眠”状态。我已经锁定了WiFi,但似乎似乎是在睡眠时CPU速度下降导致我的流量不正常的情况(即数据包流速不如我快我希望他们在设备没有睡觉时这样做。)
我知道我可能/可能应该在协议级别解决这个问题,但可能也不可能 ...
是否以任何方式“防止CPU在屏幕关闭时进入'睡眠状态'”?如果是这样,怎么样?如果没有,关于如何保持WiFi流的速度的任何建议是否一致,无论设备是否处于睡眠模式?
答案 0 :(得分: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();
答案 1 :(得分:10)
好吧,经过更多的研究和实验,似乎真正的问题是,至少在某些手机上,他们的WiFi会进入“部分睡眠”模式即使你已经使用了WiFi锁。看来这就是'WIFI_MODE_FULL_HIGH_PERF'标志是在发射WiFi锁时发明的......不幸的是,这个标志仅在某些设备/ Android版本上可用(我不知道哪个但是,它不可用对我来说)。因此,它不是所有设备的修复。
唯一的“解决方案”(实际上是一个kludge)似乎是“检测屏幕何时关闭,然后设置警报,此后立即重新打开屏幕”。对此有所帮助的链接是:
How to keep a task alive after phone sleeps?
和
http://android.modaco.com/topic/330272-screen-off-wifi-off/
我希望这可以帮助那些在手机进入睡眠状态/屏幕关闭时遇到WiFi中断的人(并且手机已拔下/断开连接[例如,当连接到adb时你不会看到这种效果; 只有手机运行时没有连接任何东西]。