アプリがバックグラウンドにあるときにネットワーク呼び出しを発行する必要があります。シーケンスは次のとおりです。アプリは GCM 呼び出しを受け取り、さらにデータを取得するために BE に API 呼び出しを発行し、通知を表示します。GCM 呼び出しは完全に受信されますが、API ネットワーク呼び出しはタイムアウトにより次のように失敗しますstack-trace
。
java.net.SocketTimeoutException: timeout
at okio.Okio$3.newTimeoutException(Okio.java:207)
at okio.AsyncTimeout.exit(AsyncTimeout.java:250)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:217)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
at com.squareup.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at com.squareup.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
at com.squareup.okhttp.internal.http.HttpEngine.access$200(HttpEngine.java:87)
at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:722)
at com.nuro.newcoms.NuroCommunicationService$21.intercept(NuroCommunicationService.java:1986)
at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:695)
at com.nuro.encryption.NuroSSLContext$1.intercept(NuroSSLContext.java:94)
at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:695)
at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:576)
at com.squareup.okhttp.Call.getResponse(Call.java:287)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:243)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:205)
at com.squareup.okhttp.Call.execute(Call.java:80)
at retrofit.client.OkClient.execute(OkClient.java:53)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326)
at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)`
私はokhttp
verを使用しています2.7.5
、retrofit
1.9.0
アプリはバックグラウンドにありますが、デバイスは居眠り状態ではなく、画面はオンで、充電もされています。だからそれはDOZEの問題ではありません。
との両方で発生WiFi
し3/4G
ます。
pre-nougat
デバイスにはこの問題はありません。
UPD バッテリー設定でアプリが「最適化されていない」として選択されている場合、すべてが魅力的に機能します。