2016-04-14 4 views
11

Ich bin neu zu Retrofit und möchte wissen, was die beste Praxis ist. HierSoll ich mit einem Singleton nachrüsten?

ist einiger abstrahierte Code, den ich online gefunden:

public class RestClient 

{ 
    private static final String BASE_URL = "your base url"; 
    private ApiService apiService; 

    public RestClient() 
    { 
     Gson gson = new GsonBuilder() 
       .registerTypeAdapterFactory(new ItemTypeAdapterFactory()) // This is the important line ;) 
       .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'") 
       .create(); 

     RestAdapter restAdapter = new RestAdapter.Builder() 
       .setLogLevel(RestAdapter.LogLevel.FULL) 
       .setEndpoint(BASE_URL) 
       .setConverter(new GsonConverter(gson)) 
       .setRequestInterceptor(new SessionRequestInterceptor()) 
       .build(); 

     apiService = restAdapter.create(ApiService.class); 
    } 

    public ApiService getApiService() 
    { 
     return apiService; 
    } 
} 

und kann sagen, dass ich eine api Anfrage machen will/Aufruf mit dieser Funktion

RestClient restClient = new RestClient(); 
restClient.getApiService().getPosts(); 

Meine Frage ist, soll ich eine neues restClient-Objekt oder dies sollte ein Singleton sein, oder der ApiService sollte ein Singleton sein.

Was ist die beste Praxis? Bitte beachten Sie, dass ich keine Abhängigkeitsinjektion verwenden möchte. Ich möchte nur verstehen, wie Retrofit am besten zu nutzen ist.

Wie würden einige von Ihnen diesen Anruf tätigen?

Antwort

3

Der Code, den Sie haben, ist in Ordnung. Sie können den restClient als Singleton verwenden und dann einfach restClient.getApiService().getPosts(); aufrufen, wenn Sie die Posts erneut abrufen möchten (erstellen Sie nicht jedes Mal einen neuen restClient).

+1

Wenn es ein Singleton ist, kann es zwei oder mehr API-Anfragen parallel behandeln? – user1796624

+3

Ja, es kann viele parallele Anfragen verarbeiten - ich bin nicht sicher, was das Limit ist, aber wenn Sie das überschreiten, wird es die Anfrage in die Warteschlange stellen (angenommen, dass Sie es asynchron verwenden, was Sie sollten). Ich habe erfolgreich ein Dutzend oder mehr Async-Anfragen in schneller Folge geworfen, ohne sich Gedanken darüber machen zu müssen, wie viele offene Anfragen es gibt. – GreyBeardedGeek

7

Sie sollten RestClient als Singleton in irgendeiner Weise machen, die Sie mögen (Enum, Standard getInstance() oder sogar double check).

Wenn Sie sie als Singleton beibehalten, wird die Leistung erhöht, da Sie nicht jedes Mal kostenintensive Objekte wie , RestAdapter und ApiService erstellen.

Edit: Max-Anfragen, die zur gleichen Zeit durch Retrofit gehandhabt werden kann, ist abhängig von Httpclient-Konfiguration.

Bei Verwendung mit OkHttp ist der Standardwert 64 (definiert in Dispatcher).

Allerdings kann es über setMaxRequests() manipuliert werden, denken Sie daran, nicht zu viele Threads zu spawnen (es kann zu OutOfMemory führen).

Verwandte Themen