Android: один против многих экземпляров HttpClient на приложение - PullRequest
20 голосов
/ 23 октября 2009

До недавнего времени наше приложение совместно использовало один экземпляр Apache HttpClient, используя ThreadSafeClientConnManager во всем приложении. Экземпляр клиента http удерживался одноэлементным классом.

Поскольку мне не нравится шаблон синглтона из-за его многочисленных проблем, я реорганизовал наш метод доступа API в качестве объекта для каждого потока, но теперь для каждого потока (который в нашем случае означает в основном для Activity / Service) создается новый экземпляр HttpClient .

Не то чтобы у меня были проблемы с этим новым подходом, но я читал, что люди Apache предлагают иметь только один экземпляр на приложение по соображениям производительности.

Визуально то, что мы делали раньше, было так:

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

Теперь мы делаем это:

Activity1 ... ActivityN
    |             |
    |             |
HttpClient1   HttpClientN

Как вы, ребята, делаете это в своих приложениях? Если вы используете один и тот же HttpClient в своем приложении и потенциально много одновременно работающих потоков, как вы обрабатываете доступ к нему?

1 Ответ

12 голосов
/ 23 октября 2009

В двух словах:

Создайте экземпляр org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager и используйте его при создании DefaultHttpClient.

Ссылка на источник выборки: Многопоточный доступ HttpClient

Редактировать: Извините, вы не видели ваши изменения до публикации. В этом случае нет ничего плохого в «Синглтоне».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...