2017-09-19 3 views
0

Sollte ich Objekte zwischenspeichern, die durch Retrofit erzeugt wurden, oder wird es empfohlen, sie im laufenden Betrieb zu erstellen?Ist es empfehlenswert, Retrofit-Instanzen im Speicher zu belassen?

Ich beginne eine allmähliche Migration von einem alten Netzwerk-Framework zu Retrofit, die mit einer sehr einfachen Logik begann, um Retrofit erstellte Instanzen zwischenzuspeichern. Dies ist auf unsere Architektur, die verschiedene Endpunkte in verschiedenen Aktivitäten/Fragmente verwenden, wird diese Methode, wenn der Benutzer besuchen verschiedene Teile der App aufgerufen werden:

static public <T> T getApi(Class<T> apiInterface) { 
    validateInitialization("getApi()"); 

    if (!mApis.containsKey(apiInterface.getSimpleName())) { 
    mApis.put(apiInterface.getSimpleName(), retrofit().create(apiInterface)); 
    } 

    return (T) mApis.get(apiInterface.getSimpleName()); 
} 

jedoch, wie wir unsere Schemata weiterhin die Migration Retrofit zu verwenden, Diese Karte wird größer (derzeit können etwa 20 verschiedene Schnittstellen/Apis erstellt werden) und enthält manchmal Instanzen, die nicht mehr verwendet werden.

+0

Singleton mit Dolch2 und injizieren, wo erforderlich. Hilft https://github.com/googlesamples/android-architecture-components/blob/master/GithubBrowserSample/app/src/main/java/com/android/example/github/di/AppModule.java? – Raghunandan

Antwort

2

Ich würde sagen, dass die Antwort "es kommt darauf an".

Es gibt keinen Nachteil (den ich kenne), diese Objekte zu cachen, die Retrofit innewohnen; Es ist nicht so, als würden diese Service-Objekte die Akkulaufzeit des Geräts massiv beeinträchtigen oder etwas so verrücktes.

Stattdessen kommt es darauf an, welchen Nachteil Sie vermeiden möchten: den potentiellen Verbrauch von "extra" Speicher durch Service-Objekte, die nicht wieder verwendet werden, aber nicht Müll gesammelt werden können, oder die potenzielle "Langsamkeit" entstehen, indem Sie für jeden Aufruf ein neues Serviceobjekt erstellen. Sie können nur Ihre App und die Verhaltensweisen/Präferenzen Ihrer Nutzer analysieren und entscheiden, auf welche Weise Sie lieber gehen möchten.

In meiner persönlichen Erfahrung habe ich mir keine Sorgen über die Kosten für die Erstellung eines neuen Service-Objekts im laufenden Betrieb gemacht. Ich habe nie einen wahrnehmbaren Unterschied in der Geschwindigkeit meiner Apps als Folge davon bemerkt.

Im Allgemeinen würde ich empfehlen, vor zu optimieren Sie haben einen Beweis für ein Problem. Ich habe keinen Beweis, dass Retrofit.create() für meine Anwendungsfälle zu langsam ist, also rufe ich es jedes Mal auf der Stelle.

Verwandte Themen