Android: Einer gegen viele Instanzen von HttpClient pro Anwendung
Bis vor kurzem, unsere app gemeinsam einen einzelnen Apache-HttpClient-Instanz mithilfe der ThreadSafeClientConnManager über die gesamte Anwendung. Der http-client-Instanz wurde gehalten von einer singleton-Klasse.
Da gefällt mir das singleton-pattern für seine zahlreichen Probleme, die ich umgestaltet werden, unsere API-accessor ein pro-thread-Objekt, aber jetzt für jeden thread (was meist bedeutet, pro-Aktivität/Dienstleistung in unserem Fall) einen neuen HttpClient-Instanz erstellt.
Es ist nicht so, dass ich Probleme haben mit diesem neuen Ansatz, aber ich habe gelesen, dass die Apache-Leute empfehlen, nur eine Instanz pro Anwendung aus performance-Gründen.
Visuell, was wir vorher Taten, war dies:
HttpClient (thread safe)
|
|
/\
/ \
Activity1...ActivityN
Nun, wir tun es:
Activity1 ... ActivityN
| |
| |
HttpClient1 HttpClientN
Wie seid Ihr dazu in Ihre Anwendungen? Wenn Sie teilen sich ein einziges HttpClient über Ihre app und möglicherweise vielen gleichzeitigen threads, wie gehst du mit Zugriff?
- Konnte Sie null-in auf, welcher Ansatz besser ist, die erste (Singleton) oder zweite?
- Ich verwenden den ersten Ansatz jetzt. Eine Fabrik übernimmt nur die Instanziierung einer Instanz, die dann verwendet ThreadSafeConnManager zu bewältigen gleichzeitige Anforderungen. Ich glaube, das ist, wie AndroidHttpClient (FroYo und neuer API-levels) festgelegt ist, zu. Funktioniert gut mit DI-frameworks wie Guice zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurz gesagt:
Erstellen Sie eine Instanz der
org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
und verwenden Sie es bei der Erstellung einer DefaultHttpClient.Link zu Beispiel-Quelle:
HttpClient Multithread-Zugriff
Edit: Sorry, wollte nicht sehen, Ihre Bearbeitung, bevor du postest. Es ist nichts falsch mit "Singleton" in diesem Fall.
HttpClient
, wenn Sie den AufrufhttpClient.getConnectionManager().shutdown();
?