【发布时间】:2016-08-26 21:39:14
【问题描述】:
在调查我从用户那里得到的一份报告时,我注意到当启用省电模式(Nexus 4、Android 5.1.1)时,下载数据的后台服务会在一段时间后出现连接异常。当设备屏幕关闭时会发生这种情况,没有在屏幕打开时对其进行测试。
在操作过程中同时持有 PowerManager.PARTIAL_WAKE_LOCK 和 WifiManager.WIFI_MODE_FULL。我正在使用 OkHttp 进行连接,并且 Wifi 一直处于打开状态。
在这种情况下,除了同时持有两个锁(wifi 和 partial_wake),我还能做什么?这对于用户使这些连接正常工作至关重要。
Stacktrace - 但我认为它在这里并不真正相关:
W/System.err: java.util.concurrent.ExecutionException: java.net.ConnectException: Failed to connect to *************
W/System.err: at java.util.concurrent.FutureTask.report(FutureTask.java:93)
W/System.err: at java.util.concurrent.FutureTask.get(FutureTask.java:177)
....
W/System.err: Caused by: java.net.ConnectException: Failed to connect to **************
W/System.err: at okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:139)
W/System.err: at okhttp3.internal.io.RealConnection.connect(RealConnection.java:108)
W/System.err: at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:188)
W/System.err: at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127)
W/System.err: at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
W/System.err: at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289)
W/System.err: at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
W/System.err: at okhttp3.RealCall.getResponse(RealCall.java:240)
W/System.err: at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
W/System.err: at okhttp3.RealCall.execute(RealCall.java:57)
...
编辑:wifi 和移动数据连接都会发生这种情况。我还确认唤醒锁被持有并且一切都按预期工作,除了无法连接的事实。当屏幕打开时,一切正常,但在这里保持屏幕打开不是一个可接受的解决方案
【问题讨论】: