我在Android中看到了一些例子:maybeCreateHttpClient(),特别是在Google示例中,它确实检查HttpClient对象是否被实例化,如果没有,则实例化它,并重用它。
为什么这种做法?创建新的HttpClient是否昂贵?
答案 0 :(得分:3)
使用连接池(例如ThreadSafeClientConnManager)来管理您的客户。
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager connman = new ThreadSafeClientConnManager(params, registry);
client = new DefaultHttpClient(connman, params);
client是一个可以重用的单例对象,用于触发请求:
HttpResponse response = client.execute(new HttpGet(URL));
答案 1 :(得分:0)
HttpClient是一个相当庞大且复杂的对象。您可以在应用中进行数十次(或可能更多)的http呼叫。如果你为每个http请求创建了一个新的,你会很快遇到内存问题,并且肯定会注意到垃圾收集减慢。
http客户端是一个通用组件,可以帮助您进行http调用,只需重用它即可。没有理由不这样做。