私は、デバイスから取得したデータをサーバー API に常に送信するアプリケーションに取り組んでいます。そして、バックグラウンドで常に動作し、データを収集するサービスと、サーバーとの接続の確立とデータの送信を担当するこのサービスのネットワークスレッドがあります。
私が抱えている問題は、サービスの起動時に Wake と WiFi のロックを取得しても、ある時点で、デバイスが接続不良の 3g ネットワーク上にあるときに、ソケットの書き込みメソッドがハングしているように見えることです。これは、各操作の後に出力したログからわかります。
ネットワーク スレッドは非常に単純で、次のように記述できます。
while(true) {
if(!connectedToServer) {
connectToServer();
}
acquireData();
sendData();
}
そして sendData は非常に単純です - データをソケット出力ストリームに書き込みます。ログで見たところ、接続が不十分な場合、OutputStream.write() 呼び出しが無期限にブロックされているようです。
誰かが同様の問題を経験しましたか?
ありがとう、