Pergunta

Até recentemente, nosso aplicativo compartilhado uma única instância Apache HttpClient usando o ThreadSafeClientConnManager em toda a aplicação. A instância do cliente http foi realizada por uma única classe.

Uma vez que eu não gosto do padrão Singleton por seus inúmeros problemas, eu reformulado nosso assessor API para ser um objeto por thread, mas agora para cada thread (que significa principalmente por Activity / Serviço em nosso caso) uma nova instância HttpClient é criado .

Não é que eu tenho problemas com esta nova abordagem, mas eu li que as pessoas Apache sugerem só para ter uma instância por aplicativo por razões de desempenho.

visualmente, o que fizemos antes era o seguinte:

HttpClient (thread safe)
          |
          |
         /\
        /  \
Activity1...ActivityN

Agora, fazemos isso:

Activity1 ... ActivityN
    |             |
    |             |
HttpClient1   HttpClientN

Como vocês fazem isso em suas aplicações? Se você compartilhar um único HttpClient em toda a sua aplicação e potencialmente muitas threads simultâneos, como você lida com o acesso a ele?

Foi útil?

Solução

Em poucas palavras:

Criar uma instância de org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager e usá-lo na construção de um DefaultHttpClient.

Link para a fonte de amostra: HttpClient acesso multithreaded

Edit: Desculpe, não viu a sua edição antes de postar. Não há nada de intrinsecamente errado com "Singleton" neste caso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top