2012-02-08 11 views
7

ThreadSafeClientConnectionManagetを使用して読み書きをブロックするためのSSLソケットのタイムアウトを設定するにはどうすればよいですか? SSLソケットの読み書き中にネットワーク接続が失われると、Android OS 2.2および2.3デバイスで15分のタイムアウトが発生することがわかりました。Android:ThreadSafeClientConnectionManagerを使用して読み書きをブロックするためのSSLソケットのタイムアウトを設定するにはどうすればよいですか?

私は自分のHttpClientで次のタイムアウトを設定します。

mParams = new BasicHttpParams(); 
    HttpProtocolParams.setVersion(mParams, HttpVersion.HTTP_1_1); 
    HttpProtocolParams.setContentCharset(mParams, "UTF-8"); 
    HttpProtocolParams.setUserAgent(mParams, USER_AGENT); 

    HttpConnectionParams.setConnectionTimeout(mParams, TIME_OUT); 
    HttpConnectionParams.setSoTimeout(mParams, TIME_OUT); 

    ConnManagerParams.setTimeout(mParams, TIME_OUT); 

    final SchemeRegistry registry = new SchemeRegistry(); 
    registry.register(new Scheme(HTTP_SCHEME, PlainSocketFactory.getSocketFactory(), 80)); 
    registry.register(new Scheme(HTTPS_SCHEME, SSLSocketFactory.getSocketFactory(), 443)); 

    final ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(mParams, registry); 

    mClient = new DefaultHttpClient(manager, mParams); 

私は、ファイルの実体でHTTP PUTリクエストを実行するために、クライアントを使用しています。途中で飛行機モードをオンにした場合、15〜30秒待ってから飛行機モードをオフにすると、ソケットは読み込みまたは書き込みのいずれかでスタックされ、15分間はタイムアウトしません。

答えて

1

非常に正当な質問から遠ざけてはいけませんが、ブログ投稿Android's HTTP Clientsは、新しい開発にHttpURLConnectionを使用することを推奨しています。あなたはスイッチングAPIを考えましたか?

+0

Froyoをサポートする必要があり、そのリリースでHttpURLConnectionに問題があるため、APIを切り替えることはありません。さらに、ICSまでHttpURLConnectionに相当するものを持たないApacheクライアントの周りには、大量のカスタムコードがあります。しかし、とにかく提案ありがとう。 – Todd