android - squareup - retrofit post




Confronto tra le librerie di rete Android: OkHTTP, Retrofit e Volley (7)

Domande in due parti da uno sviluppatore iOS che sta imparando Android, lavorando su un progetto Android che farà una serie di richieste da JSON per l'immagine allo streaming di download di audio e video:

  1. Su iOS ho utilizzato il progetto AFNetworking estensivo. C'è una libreria equivalente per Android?

  2. Ho letto su OkHTTP e Retrofit di Square, oltre a Volley ma non ho ancora esperienza nello sviluppo con loro. Spero che qualcuno possa fornire alcuni esempi concreti di casi d'uso migliori per ciascuno. Da quello che ho letto, sembra che OkHTTP sia il più robusto dei tre e possa gestire i requisiti di questo progetto (menzionato sopra).


Spero che qualcuno possa fornire alcuni esempi concreti di casi d'uso migliori per ciascuno.

Utilizzare Retrofit se si comunica con un servizio Web. Usa la libreria peer Picasso se stai scaricando le immagini. Utilizzare OkHTTP se è necessario eseguire operazioni HTTP che si trovano all'esterno di Retrofit / Picasso.

Volley compete più o meno con Retrofit + Picasso. Tra i lati positivi, è una libreria. Sul lato negativo, è uno non documentato, non supportato, "lancia il codice sul muro e crea una presentazione I | O su di esso".

EDIT - Volley è ora ufficialmente supportato da Google. Fai riferimento alla Guida per gli sviluppatori di Google

Da quello che ho letto, sembra che OkHTTP sia il più robusto del 3

Retrofit utilizza OkHTTP automaticamente se disponibile. Esiste un Gist di Jake Wharton che collega Volley a OkHTTP.

e potrebbe gestire i requisiti di questo progetto (menzionato sopra).

Probabilmente non ne userai nessuno per "download in streaming di audio e video", secondo la definizione convenzionale di "streaming". Invece, il framework multimediale di Android gestirà le richieste HTTP per te.

Detto questo, se si sta tentando di fare il proprio streaming basato su HTTP, OkHTTP dovrebbe gestire tale scenario; Non ricordo quanto bene Volley avrebbe gestito lo scenario. Né Retrofit né Picasso sono progettati per questo.


Retrofit 1.9.0 vs RoboSpice

Sto usando entrambi nella mia app.

Robospice funziona più velocemente di Retrofit ogni volta che analizzo la classe JSON nidificata. Perché Spice Manger farà tutto per te. In Retrofit è necessario creare GsonConverter e deserializzare.

Ho creato due frammenti nella stessa attività e ho chiamato la stessa ora con due lo stesso tipo di URL.

09-23 20:12:32.830  16002-16002/com.urbanpro.seeker E/RETROFIT﹕   RestAdapter Init
09-23 20:12:32.833  16002-16002/com.urbanpro.seeker E/RETROFIT﹕ calling the method
09-23 20:12:32.837  16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ initialzig spice manager
09-23 20:12:32.860  16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ Executing the method
09-23 20:12:33.537  16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ on SUcceess
09-23 20:12:33.553  16002-16002/com.urbanpro.seeker E/ROBOSPICE﹕ gettting the all contents
09-23 20:12:33.601  16002-21819/com.urbanpro.seeker E/RETROFIT﹕ deseriazation starts
09-23 20:12:33.603  16002-21819/com.urbanpro.seeker E/RETROFIT﹕ deseriazation ends

Aggiungendo alla risposta accettata e cosa LOG_TAG ha detto .... per Volley analizzare i tuoi dati in un thread in background devi sottoclasse Request<YourClassName> come viene chiamato il metodo onResponse sul thread principale e l'analisi sul thread principale potrebbe causare l'interfaccia utente ritardare se la tua risposta è grande. Leggi here su come farlo.


E ancora un'altra opzione: https://github.com/apptik/jus

  • È modulare come Volley, ma è più esteso e la documentazione sta migliorando, supportando diversi stack e convertitori HTTP fuori dalla scatola
  • Ha un modulo per generare mappature di interfacce API server come Retrofit
  • Ha anche il supporto JavaRx

E molte altre utili funzioni come marcatori, trasformatori, ecc.


Recentemente ho trovato una lib chiamata ion che porta un piccolo extra al tavolo.

ion ha il supporto integrato per il download delle immagini integrato con ImageView, JSON (con l'aiuto di GSON), i file e un pratico supporto per il threading dell'interfaccia utente.

Lo sto usando su un nuovo progetto e finora i risultati sono stati buoni. Il suo uso è molto più semplice di Volley o Retrofit.


Solo per aggiungere un po 'alla discussione dalla mia esperienza di lavoro con Volley:

  1. Volley non gestisce caricamenti in streaming o download in alcun senso. Cioè, l'intero corpo della richiesta deve essere in memoria e non è possibile utilizzare un OutputStream per scrivere il corpo della richiesta sul socket sottostante, né si può usare un InputStream per leggere il corpo della risposta, come fa HttpURLConnection base. Quindi, Volley è una scelta sbagliata per il caricamento o il download di file di grandi dimensioni. Le tue richieste e risposte dovrebbero essere piccole. Questo è uno dei maggiori limiti di Volley che ho incontrato personalmente. Per quello che vale, OkHttp ha interfacce per lavorare con i flussi.

  2. La mancanza di documentazione ufficiale è fastidiosa, anche se sono stato in grado di ovviare a ciò leggendo il codice sorgente, che è piuttosto facile da seguire. Ciò che è più fastidioso è che, per quanto posso dire, Volley non ha versioni ufficiali di rilascio e nessun artefatto Maven o Gradle, e quindi gestirlo come dipendenza diventa più un mal di testa che, ad esempio, una qualsiasi delle librerie che Square ha rilasciato . Devi solo clonare un repository, costruire un barattolo e sei da solo. Alla ricerca di una correzione di bug? Prendi e spera che sia lì. Potresti prendere anche altre cose; non sarà documentato. A mio parere, ciò significa in effetti che Volley è una libreria di terze parti non supportata, anche se la base di codice è ragionevolmente attiva. Caveat emptor.

  3. Come un matto, avere il Content-Type legato al tipo di classe / richiesta (JsonObjectRequest, ImageRequest, ecc.) È un po 'imbarazzante e riduce la flessibilità del codice chiamante un po', dato che sei legato alla gerarchia di tipo di richiesta esistente di Volley. Mi piace la semplicità di impostare Content-Type come un'intestazione come qualsiasi altra (non farlo con Volley, comunque, finirai con due intestazioni Content-Type!). Questa è solo la mia opinione personale, però, e può essere risolta.

Questo non vuol dire che Volley non abbia alcune caratteristiche utili. Lo fa certamente. Criteri di retry facilmente personalizzabili, memorizzazione nella cache trasparente, un'API di annullamento e supporto per la pianificazione delle richieste e le connessioni simultanee sono ottime funzionalità. Sappi solo che non è inteso per tutti i casi di utilizzo di HTTP (vedi precedente punto 1), e che ci sono alcuni grattacapi coinvolti nel mettere in uso Volley nella tua app (articolo 2).


RoboSpice vs. raffica

Da https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ

  • RoboSpice (RS) è basato sul servizio e più rispettoso della filosofia Android rispetto a Volley. Volley è basato su thread e questo non è il modo in cui l'elaborazione in background dovrebbe aver luogo su Android. In definitiva, puoi scavare verso il basso entrambe le librerie e scoprire che sono abbastanza simili, ma il nostro modo di eseguire l'elaborazione in background è più orientato a Android, ci consente, ad esempio, di dire agli utenti che RS sta effettivamente facendo qualcosa in background, che sarebbe difficile per volley (in realtà non lo è affatto).
  • RoboSpice e volley offrono entrambe funzionalità gradevoli come la prioritizzazione, riprovano le politiche, richiedono la cancellazione. Ma RS offre di più: una memorizzazione nella cache più avanzata e una grande, con la gestione della cache, l'aggregazione delle richieste, più funzionalità come il reinserimento in una richiesta in sospeso, la gestione della scadenza della cache senza fare affidamento sulle intestazioni del server, ecc.
  • RoboSpice fa di più all'esterno del thread UI: volley deserializza i tuoi POJO sul thread principale, il che è orribile per me. Con RS la tua app sarà più reattiva.
  • In termini di velocità, abbiamo sicuramente bisogno di metriche. RS è diventato super veloce ora, ma ancora non abbiamo figure da mettere qui. Volley dovrebbe teoricamente essere un po 'più veloce, ma la RS ora è massicciamente parallela ... chi lo sa?
  • RoboSpice offre un'ampia gamma di compatibilità con le estensioni. Puoi usarlo con okhttp, retrofit, omlite (beta), jackson, jackson2, gson, serializzatore xml, client http google, spring android ... Abbastanza. Volley può essere usato con ok http e usa gson. questo è tutto.
  • Volley offre più zucchero UI che RS. Volley fornisce NetworkImageView, RS fornisce un adattatore per spicelista. In termini di funzionalità non è così lontano, ma credo che Volley sia più avanzato su questo argomento.
  • Più di 200 bug sono stati risolti in RoboSpice sin dalla sua versione iniziale. È piuttosto robusto e viene utilizzato pesantemente nella produzione. Volley è meno maturo ma la sua base di utenti dovrebbe crescere rapidamente (effetto Google).
  • RoboSpice è disponibile su Maven Central. Volley è difficile da trovare;)




android-networking