2014-04-23 25 views
13

Ho un'applicazione Android che attualmente utilizza la libreria Volley per effettuare richieste di rete e mostrare immagini scaricate con NetworkImageView.Richieste HTTP parallele con Retrofit

Vorrei testare le capacità di Retrofit e poiché ho bisogno di eseguire molte richieste (migliaia) sono un po 'preoccupato per l'esecuzione parallela. Volley gestisce le richieste parallele con lo RequestQueue che limita le richieste in esecuzione simultanee a quattro, mentre le altre richieste vengono accodate in attesa di essere eseguite. Nelle documentazioni Retrofit non ho trovato alcun modo per gestire il numero di richieste concorrenti e ho il sospetto che tali dettagli siano lasciati allo sviluppatore in questa libreria.

È corretto? Se è così, c'è qualche implementazione/libreria orientata ad Android? Altrimenti, quali sono le migliori pratiche per gestire le richieste parallele?

risposta

36

Retrofit utilizza un Executor per le richieste di accodamento.

L'impostazione predefinita utilizza Executors.newCachedThreadPool che consente thread illimitati. Questo si adatta alla maggior parte dei casi d'uso, poiché normalmente avresti sempre solo una o due richieste contemporaneamente.

È possibile modificare questo comportamento, tuttavia, fornendo il proprio quando si crea lo RestAdapter. Chiama setExecutors e passa un esecutore che utilizza un pool di thread confinato (limitato al numero che desideri). Per il secondo argomento, è sufficiente passare una nuova istanza di MainThreadExecutor in modo che i callback avvengano sul thread principale.

+0

Stai suggerendo di utilizzare un 'ThreadPoolExecutor' per gestire i miei thread? Se sì, lo stavo usando prima di migrare a 'Volley', ma avevo due problemi principali: 1) Stavo perdendo alcune richieste perché la coda era piena, Volley ha una coda illimitata. 2) Alcune richieste sono state rimosse dalla coda perché erano in attesa troppo a lungo. – Vektor88

+3

Sì. L'uso di una coda illimitata risolverà sia 1 che 2. Ci sono alcuni in 'java.util.concurrent' tra cui scegliere. –

+0

Grazie per i suggerimenti, questo è sicuramente funzionante. – Vektor88