20 Stimmen

Android: Eine oder mehrere Instanzen von HttpClient pro Anwendung

Bis vor kurzem hat unsere Anwendung eine einzige Apache HttpClient-Instanz mit dem ThreadSafeClientConnManager für die gesamte Anwendung freigegeben. Die Http-Client-Instanz wurde von einer Singleton-Klasse gehalten.

Da ich das Singleton-Muster wegen seiner zahlreichen Probleme nicht mag, habe ich unseren API-Zugriff auf ein Pro-Thread-Objekt umgestellt, aber jetzt wird für jeden Thread (was in unserem Fall meist pro Aktivität/Dienst bedeutet) eine neue HttpClient-Instanz erstellt.

Es ist nicht so, dass ich Probleme mit diesem neuen Ansatz habe, aber ich habe gelesen, dass die Apache-Leute vorschlagen, aus Leistungsgründen nur eine Instanz pro Anwendung zu haben.

Was wir vorher gemacht haben, war folgendes:

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

Jetzt tun wir dies:

Activity1 ... ActivityN
    |             |
    |             |
HttpClient1   HttpClientN

Wie macht ihr das in euren Bewerbungen? Wenn Sie einen einzigen HttpClient über Ihre App und potenziell viele gleichzeitige Threads teilen, wie behandeln Sie den Zugriff darauf?

12voto

Nate Punkte 4644

Kurz und bündig:

Erstellen Sie eine Instanz von org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager und verwenden Sie es beim Erstellen eines DefaultHttpClient.

Link zur Beispielquelle: HttpClient Multithreading-Zugriff

Edit: Sorry, ich habe deinen Edit vor dem Posten nicht gesehen. An sich ist an "Singleton" in diesem Fall nichts auszusetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X