Fino a poco tempo fa, la nostra app condivideva un'unica istanza HttpClient di Apache che utilizzava ThreadSafeClientConnManager su tutta l'applicazione. L'istanza del client http era detenuta da una classe singleton.Android: una contro molte istanze di HttpClient per applicazione
Poiché mi piace il pattern Singleton per i suoi numerosi problemi, rifattorizzata nostra di accesso API per essere un oggetto per-thread, ma ora ogni filo (che significa principalmente per attività/servizio nel nostro caso) una nuova istanza HttpClient è creato.
Non è che io abbia problemi con questo nuovo approccio, ma ho letto che la gente di Apache suggerisce di avere solo un'istanza per app per motivi di prestazioni.
Visivamente, quello che abbiamo fatto prima è stata questa:
HttpClient (thread safe)
|
|
/\
/\
Activity1...ActivityN
Ora, facciamo questo:
Activity1 ... ActivityN
| |
| |
HttpClient1 HttpClientN
Come fate a fare questo nelle vostre applicazioni? Se condividi un singolo HttpClient nell'app e potenzialmente molti thread simultanei, come gestisci l'accesso ad esso?
Potresti azzerare su quale approccio è migliore il primo (Singleton) o il secondo? –
Io uso il primo approccio ora. Una factory si occupa solo dell'istanza di un'istanza, che quindi utilizza ThreadSafeConnManager per far fronte a richieste simultanee. Credo che sia così anche AndroidHttpClient (FroYo e nuovi livelli API). Funziona bene anche con framework DI come Guice. – Matthias