一部の顧客の電話で奇妙な問題が発生しています。サービスエリア外に何時間もいると、Android アプリがネットワークにアクセスできなくなるようです。Web ブラウザーや電子メールなどの他のアプリケーションは Web にアクセスできますが、私のアプリにはアクセスできません。
考えられる唯一の説明は、データ サービスがない場合にソケットが何らかの形でリークしているということです。
これが私のコードです:
String sendWebPOST(String url, String pPostData) throws IOException {
AndroidHttpClient c = null;
InputStream is = null;
OutputStream os = null;
int rc;
String strResponse = null;
try {
c = AndroidHttpClient.newInstance("Mobile");
// Set the request method and headers
HttpPost request = new HttpPost(url);
request.addHeader("Content-Type", "application/x-www-form-urlencoded");
request.setEntity(new StringEntity(pPostData));
try {
HttpResponse response = c.execute(request);
// Getting the response code will open the connection,
// send the request, and read the HTTP response headers.
// The headers are stored until requested.
rc = response.getStatusLine().getStatusCode();
if (rc != HttpStatus.SC_OK) {
throw new IOException("HTTP response code: " + rc);
}
try {
is = response.getEntity().getContent();
int ch;
StringBuffer sb = new StringBuffer();
while ((ch = is.read()) != -1) {
sb.append((char) ch);
}
//if(sb.length() > 0)
strResponse = sb.toString();
}
finally {
if (is != null) {
is.close();
}
}
}
finally {
if (os != null) {
os.close();
}
}
}
catch (ClassCastException e) {
throw new IllegalArgumentException("Not an HTTP URL");
}
finally {
if (c != null) {
c.close();
}
}
return strResponse;
}
この関数は、約 10 分ごとに呼び出され、リモート サーバーに更新を送信します。アプリがこの奇妙な状態になっても、ユーザーは引き続きアクティビティを開いたり、メニューを操作したりできるため、アプリは引き続き実行されます。ただし、ネットワーク経由で何も送信できません。
何が起こっているのでしょうか?
問題の電話は、T-Mobile ネットワークで Android 2.3 を実行している myTouch 4G と Samsung Galaxy II です。
ありがとう。