2016-08-24 6 views
1

ユーザーから入手したレポートの1つを調べると、省電力モードが有効になっていると(Nexus 4、Android 5.1.1)、データをダウンロードするバックグラウンドサービスがしばらくして接続の例外になる。これは、デバイスの画面がオフで、画面がオンの状態でテストしなかった場合に発生します。省電力モードでのネットワーク接続

操作時に両方PowerManager.PARTIAL_WAKE_LOCKWifiManager.WIFI_MODE_FULLを保持があります。私は接続のためにOkHttpを使用していて、Wifiは常にオンになっていました。

このような状況で、両方のロック(wifiとpartial_wake)を保持する以外に何ができますか?これは、ユーザーがこれらの接続を有効にするために重要です。

スタックトレース - しかし、それはここでは本当に関係ありません、私は思う:

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) 
... 

編集を:これは、無線LANとモバイルデータ接続の両方で発生します。私はまた、起床ロックが保留されていることを確認し、接続が不可能であるという事実を除いて、すべてが想定どおり動作しています。画面がオンの場合、すべて正常に動作しますが、画面をオンにすることは許容できる解決策ではありません。

答えて

2

これはパワーセービングモードの可能性が高いためです。このモードでは、システムはウェイクコールの数を最小限に抑えようとし、不要であるとみなされるすべてのプロセスを停止します。

幸いなことにAndroidはこれに対処する方法を予見しています。これはForeground Serviceと呼ばれています。サービスがフォアグラウンドとして開始されている場合、サービスはユーザー活動として扱われ、リソースが不足している場合は削除の対象にはなりません。

あなたはフォアグラウンドにすべての重要な活動を移動することを検討してバックグラウンドサービスにご入力のための

+0

感謝を(例えば、分析)すべての支援モジュールを残すことができます。実際に私のサービスはフォアグラウンドサービスだと言いました。その前景の状態が正しく処理されているかどうかを見ていきます。 – mhenryk

+0

私はあなたの答えを正しいものとしてマークしています - 問題はより詳細でしたが、実際にはフォアグラウンドサービスはここで使用しなければならないものです。問題は、私のサービスがある時間フォアグラウンドで停止していたことです(他の作業をしている間に2〜2回)、フォアグラウンド状態に戻りました。これはAndroidアプリがネットワークアクセスを強制終了するのに十分だった。 – mhenryk

関連する問題