Do niedawna nasza aplikacja udostępniała pojedynczą instancję Apache HttpClient przy użyciu ThreadSafeClientConnManager w całej aplikacji. Instancja klienta http była przechowywana przez pojedynczą klasę.Android: Jedna lub wiele instancji HttpClient na aplikację
Ponieważ nie lubię pojedynczego wzorca dla jego licznych problemów, refaktoryzowałem nasz akcesor API, aby był obiektem wątku, ale teraz dla każdego wątku (co w większości przypadków oznacza aktywność/usługę w naszym przypadku), nowa instancja HttpClient jest stworzony.
Nie chodzi o to, że mam problem z tym nowym podejściem, ale przeczytałem, że ludzie Apache sugerują, aby mieć tylko jedną instancję na aplikację ze względu na wydajność.
Wizualnie, co robiliśmy wcześniej było to:
HttpClient (thread safe)
|
|
/\
/\
Activity1...ActivityN
Teraz to zrobić:
Activity1 ... ActivityN
| |
| |
HttpClient1 HttpClientN
Jak robicie to w swoich aplikacjach? Jeśli udostępniasz jeden HttpClient w całej aplikacji i potencjalnie wiele równoczesnych wątków, w jaki sposób radzisz sobie z dostępem do niego?
Czy mógłbyś sprawdzić, które podejście jest lepsze od pierwszego (Singleton) lub drugiego? –
Używam teraz pierwszego podejścia. Fabryka zajmuje się tylko instancją jednej instancji, która następnie używa ThreadSafeConnManager, aby poradzić sobie z równoczesnymi żądaniami. Uważam, że tak jest skonfigurowany AndroidHttpClient (FroYo i nowsze poziomy API). Działa również ze strukturami DI, takimi jak Guice. – Matthias