Android:每个应用程序对应一个HttpClient实例

Mat*_*ias 20 concurrency singleton android

直到最近,我们的应用程序在整个应用程序中使用ThreadSafeClientConnManager共享一个Apache HttpClient实例.http客户端实例由单例类保存.

由于我不喜欢单例模式存在的众多问题,我将我的API访问器重构为每线程对象,但现在对于每个线程(在我们的情况下主要是指每个Activity/Service),都会创建一个新的HttpClient实例.

这不是我对这种新方法有问题,但我已经读过Apache人员建议每个应用程序只有一个实例出于性能原因.

在视觉上,我们之前做的是:

HttpClient (thread safe)
          |
          |
         /\
        /  \
Activity1...ActivityN
Run Code Online (Sandbox Code Playgroud)

现在,我们这样做:

Activity1 ... ActivityN
    |             |
    |             |
HttpClient1   HttpClientN
Run Code Online (Sandbox Code Playgroud)

你们是如何在你的应用程序中做到这一点的?如果您在应用程序和可能有多个并发线程之间共享一个HttpClient,那么如何处理对它的访问?

Nat*_*ate 12

简而言之:

org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager在构造DefaultHttpClient时创建一个实例并使用它.

链接到示例源: HttpClient多线程访问

编辑:对不起,在发布之前没有看到您的编辑.在这种情况下,"Singleton"没有任何内在错误.

  • @Matthias:如果你用`HttpClient`做一个单例,你什么时候调用`httpClient.getConnectionManager().shutdown();`? (4认同)