私のアプリでは、複数のIntentServiceが、ユーザーによるアプリケーションの操作に応じて、ランダムな間隔でTomcatサーバーに接続/通信します。
私はHttpに次のシングルトンを使用しています
public class CustomHttpClient {
private static HttpClient customHttpClient;
/** A private Constructor prevents instantiation */
private CustomHttpClient() {
}
public static synchronized HttpClient getHttpClient() {
if (customHttpClient == null) {
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);
HttpProtocolParams.setUserAgent(params,"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83)" +
" AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1");
ConnManagerParams.setTimeout(params, 1000);
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 10000);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params,schReg);
customHttpClient = new DefaultHttpClient(conMgr, params);
}
return customHttpClient;
}
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
}
このクラスは、2つが同時にHttpを試行するとき、または1つの接続が進行中で、別の接続が確立されるときにconnectTimeOutを提供することを除いて、正常に機能します。IntentService
ThreadSafeClientConnManager
コードの明らかな改善点の1つは、非推奨を次のように置き換えることです。PoolingClientConnectionManager.
ここにいるべきかsynchronize
->public static synchronized HttpClient getHttpClient()
シングルトンのどのエラーがconnectTimeOutを引き起こしていますか?