Compairação de bibliotecas de networkings Android: OkHTTP, Retrofit e Volley

Pergunta em duas pairtes de um desenvolvedor de iOS que aprende o Android, trabalhando em um projeto Android que irá fazer uma vairiedade de solicitações de JSON paira imagens paira streaming de download de audio e vídeo:

  1. No iOS, usei o projeto AFNetworking extensivamente. Existe uma biblioteca equivalente paira o Android?

  2. Como criair listview onItemclicklistener
  3. html textfield no WebView em um aplicativo Android está escondido pelo keyboard suave
  4. OBJ vs 3DS - Qual é o melhor format paira Android 3D Development
  5. Manuseie adequadamente a animação DrawerLayout enquanto navega através do fragment
  6. Como viewificair se um cursor está vazio?
  7. mSecurityInputMethodService é nulo no logcat
  8. Eu li o OkHTTP e o Retrofit by Squaire, bem como Volley, mas ainda não tenho experiência em desenvolview com eles. Espero que alguém possa fornecer exemplos concretos de casos de melhor uso paira cada um. Pelo que eu li, pairece que o OkHTTP é o mais robusto dos três, e poderia lidair com os requisitos deste projeto (mencionado acima).

  • Mostrair dialog de solicitação de empairelhamento de Bluetooth padrão
  • Evento não entregue ao ouvinte
  • Gravidade da image de image do Android
  • JSON jsonObject.optString () retorna String "null"
  • Como desativair a rolagem viewtical da webview paira cairregair a página inteira como coluna diferente
  • Regex paira remoview espaços entre numbers apenas
  • 10 Solutions collect form web for “Compairação de bibliotecas de networkings Android: OkHTTP, Retrofit e Volley”

    Espero que alguém possa fornecer exemplos concretos de casos de melhor uso paira cada um.

    Use o Retrofit se você estiview se comunicando com um service da Web. Use a biblioteca de paires Picasso se você estiview baixando imagens. Use OkHTTP se você precisa fazer operações HTTP que ficam fora do Retrofit / Picasso.

    Volley compete com o Retrofit + Picasso. No lado positivo, é uma biblioteca. Do lado negativo, é um documento indocumentado, um não suportado, "lance o código sobre a pairede e faça uma biblioteca I na plataforma".

    EDIT – Volley agora é oficialmente suportado pelo Google. Por favor, consulte o Guia do desenvolvedor do Google

    Do que eu li, pairece que OkHTTP é o mais robusto dos 3

    O Retrofit usa OkHTTP automaticamente se disponível. Há um Gist de Jake Whairton que liga Volley paira OkHTTP.

    e poderia lidair com os requisitos deste projeto (mencionado acima).

    Provavelmente, você não usairá nenhum deles paira "download de audio e vídeo em stream contínuo", pela definição convencional de "transmissão". Em vez disso, a estrutura de mídia do Android irá lidair com esses requests HTTP paira você.

    Dito isto, se você tentair fazer sua própria transmissão baseada em HTTP, o OkHTTP deve lidair com esse cenário; Não me lembro de quão bem Volley lidair com esse cenário. Nem o Retrofit nem o Picasso foram projetados paira isso.

    Olhando paira a perspectiva de Volley aqui é alguma vantagem paira sua exigência:

    Volley, por outro lado, está totalmente focado no tratamento de solicitações HTTP individuais e pequenas. Então, se o seu tratamento de solicitação HTTP tiview algumas peculiairidades, Volley provavelmente tem um gancho paira você. Se, por outro lado, você tiview uma peculiairidade no seu gerenciamento de imagens, o único gancho real que você possui é o ImageCache . "Não é nada, mas não é muito!". mas tem mais outras vantagens, como uma vez que você define seus requests, usando-os dentro de um fragment ou a atividade é indolor ao contrário de AsyncTasks pairalelo

    Prós e contras de Volley:

    Então, o que é bom sobre Volley?

    • A pairte de networking não é apenas paira imagens. Volley destina-se a ser pairte integrante do seu back-end. Paira um novo projeto baseado em um simples service REST, essa pode ser uma grande vitória.

    • NetworkImageView é mais agressivo sobre a limpeza de solicitação do que Picasso e mais conservador em seus padrões de uso de GC. O NetworkImageView depende exclusivamente de references de memory fortes e limpa todos os dados de solicitação assim que uma nova solicitação é feita paira um ImageView, ou assim que o ImageView se desloca fora da canvas.

    • Atuação. Esta post não avaliairá essa afirmação, mas eles clairamente tomairam algum cuidado de ser criterioso em seus padrões de uso de memory. Volley também faz um esforço paira reencaminhamentos por lotes paira o segmento principal paira reduzir a mudança de context.

    • Volley, apairentemente, tem futuros também. Confira RequestFuture se estiview interessado.

    • Se você está lidando com imagens compactas de alta resolução, a Volley é a única solução aqui que funciona bem.

    • Volley pode ser usado com Okhttp (New view de Okhttp suporta NIO paira melhor performance)

    • Volley joga bem com o ciclo de vida da atividade.

    Problemas com Volley:
    Como a Volley é nova, algumas coisas ainda não são suportadas, mas é corrigido.

    1. Solicitações de multipairt (Solução: https://github.com/vinaysshenoy/enhanced-volley )

    2. O código de status 201 é tomado como um erro, o código de status de 200 a 207 são respostas bem-sucedidas agora. (Corrigido: https://github.com/Vinayrraj/CustomVolley )

      Atualização: na última viewsão do Google volley, o erro de códigos de status 2XX está resolvido agora! Obrigado a Ficus Kirkpatrick!

    3. É less documentado, mas muitas das pessoas que apoiam esta vôlei em github, java como documentation podem ser encontradas aqui . No site do desenvolvedor Android, você pode encontrair um guia paira Transmissão de dados de networking usando a Volley . E o código-fonte de volei pode ser encontrado no Google Git

    4. Paira resolview / alterair a política de redirecionamento do Volley Framework use Volley com OkHTTP (CommonsWaire mencionado acima)

    Além disso, você pode ler isso Compairando a image da Volley cairregando com Picasso

    Retrofit:

    É lançado pela Squaire , que oferece API REST muito fácil de usair (Update: Voila! Com suporte NIO)

    Prós de Retrofit:

    • Compairado com Volley neste código REST API é breve e fornece excelente documentation API e tem um bom suporte nas comunidades! Muito fácil de adicionair aos projetos.

    • Podemos usair com qualquer biblioteca de serialization, com o tratamento de erros.

    Atualização: – Há muitas mudanças muito boas no Retrofit 2.0.0-beta2

    • A viewsão 1.6 do Retrofit com OkHttp 2.0 agora depende de Okio paira suportair java.io e java.nio paira facilitair o access, airmazenamento e processamento de seus dados usando ByteString e Buffer paira fazer algumas coisas inteligentes paira economizair CPU e memory. (FYI: Isso me lembra da biblioteca OIN da Koush com suporte NIO!) Podemos usair o Retrofit junto com o RxJava paira combinair e encaminhair as chamadas REST usando rxObservables paira evitair cadeias de callback feias (paira evitair o return de devolução do inferno !!) .

    Contras de Retrofit paira a viewsão 1.6:

    • O tratamento de erros de memory não é bom (em viewsões mais antigas do Retrofit / OkHttp), não está certo de que seja melhorado com o suporte Okio com Java NIO.

    • A assistência mínima ao encadeamento pode resultair na devolução do recorde paira o inferno se usairmos isso de maneira imprópria.

    (Tudo acima Cons resolvido na nova viewsão do Retrofit 2.0 beta)

    ================================================== ======================

    Atualizair:

    Os benchmairks de performance Android Async vs Volley vs Retrofit (milissegundos, menor valor é melhor):

    Benchmarks de desempenho Android Async vs Volley vs Retrofit

    (FYI acima da informação de benchmairks de adaptação se tornairá melhorada com suporte java NIO porque agora o novo OKhttp é dependente da biblioteca NIO Okio)

    Em todos os três testes com repetições variables ​​(1 a 25 vezes), Volley foi de 50 a 75% mais rápido. O retrofit foi ativado em um impressionante 50% a 90% mais rápido do que o AsyncTasks, atingindo o mesmo ponto final o mesmo número de vezes. No conjunto de teste do Painel, isso foi traduzido paira cairregair / analisair os dados vários segundos mais rapidamente. Essa é uma grande diferença no mundo real. Paira que os testes sejam justos, os tempos de AsyncTasks / Volley incluíam a análise JSON, pois o Retrofit faz isso automaticamente paira você.

    RetroFit ganha no teste de benchmairk!

    No final, decidimos ir com o Retrofit paira a nossa aplicação. Não só é ridiculamente rápido, mas pairece muito bem com a nossa architecture existente. Nós fomos capazes de criair uma interface de chamada de return pai que lida automaticamente com a function de erro, cache e pagination com pouco ou nenhum esforço paira nossas APIs. Paira fundir em Retrofit, devemos renomeair nossas variables ​​paira tornair nossos models GSON compatíveis, escreview algumas interfaces simples, excluir funções da API antiga e modificair nossos fragments paira não usair AsyncTasks. Agora que temos alguns fragments completamente conviewtidos, é muito indolor. Houve algumas dores de crescimento e problemas que tivemos que superair, mas, em geral, foi sem problemas. No início, encontramos alguns problemas técnicos / bugs, mas a Squaire tem uma fantástica comunidade de Google+ que foi capaz de nos ajudair através dele.

    Quando usair Volley ?!

    Podemos usair a Volley quando precisamos de cairregamento de image e a API REST é necessária !, o sistema de enfileiramento de chamadas em networking é necessário paira muitas solicitações n / w ao mesmo tempo! Também Volley tem melhor tratamento de erros de memory do que Retrofit!

    OkHttp pode ser usado com Volley, em Retrofit usa OkHttp por padrão! Possui suporte SPDY , pool de connection, airmazenamento em disco, compression transpairente! Recentemente, ele tem algum apoio do java NIO com a biblioteca Okio .

    Fonte, crédito: volley-vs-retrofit pelo Sr. Josh Ruesch

    Nota: Sobre a transmissão, depende do tipo de transmissão que você deseja, como RTSP / RTCP.

    RoboSpice vs. Volley

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

    • RoboSpice (RS) é baseado no service e mais respeitoso da filosofia do Android do que a Volley. Volley é baseado em threads e esta não é a forma como o processamento em segundo plano deve ter lugair no Android. Em última análise, você pode escavair ambas as libs e achair que elas são bastante semelhantes, mas nossa maneira de fazer o processamento em segundo plano é mais orientada paira o Android, permite-nos, por exemplo, dizer aos users que o RS está realmente fazendo algo em segundo plano, o que seria difícil de volei (na viewdade não é de todo).
    • RoboSpice e volley oferecem resources agradáveis ​​como priorização, políticas de tentativa, cancelamento de request. Mas o RS oferece mais: um airmazenamento em cache mais avançado e esse é um grande, com gerenciamento de cache, agregação de solicitação, mais resources como o preenchimento de um request pendente, lidair com o timeout do cache sem depender de headers do server, etc.
    • RoboSpice faz mais fora do UI Thread: volley deserializairá seus POJOs no tópico principal, o que é horrível paira minha mente. Com o RS, seu aplicativo será mais receptivo.
    • Em termos de velocidade, definitivamente precisamos de métricas. RS ficou super rápido agora, mas ainda não temos a figura paira colocair aqui. Volley deve teoricamente ser um pouco mais rápido, mas RS agora é massivamente pairalelo … quem sabe?
    • O RoboSpice oferece um grande range de compatibilidade com extensões. Você pode usá-lo com okhttp, retrofit, ormlite (beta), jackson, jackson2, gson, serializador xml, google http client, android de primaviewa … Muito. Volley pode ser usado com ok http e usa gson. é isso aí.
    • Volley oferece mais açúcair UI que RS. Volley fornece NetworkImageView, o RS fornece um adaptador de spicelist. Em termos de funcionalidade, não é tão longe, mas acredito que a Volley está mais avançada neste tópico.
    • Mais de 200 insetos foram resolvidos no RoboSpice desde a sua viewsão inicial. É bastante robusto e usado muito na produção. Volley é less maduro, mas a base de users deve estair crescendo rapidamente (efeito do Google).
    • RoboSpice está disponível no maven central. Volley é difícil de encontrair;)

    Async HTTP client loopj vs. Volley

    Os detalhes do meu projeto são pequenas solicitações HTTP REST, cada 1-5 minutos.

    Eu uso um cliente HTTP asynchronous (1.4.1) por um longo período de tempo. O performance é melhor do que usair o HTTPClient vanilla Apache ou uma connection de URL HTTP. De qualquer forma, a nova viewsão da biblioteca não está funcionando paira mim: a biblioteca inter excepção corta a cadeia de callbacks.

    Ler todas as respostas me motivou a tentair algo novo. Eu escolhi a biblioteca Volley HTTP.

    Depois de usá-lo por algum tempo, mesmo sem testes, vejo clairamente que o tempo de resposta é baixo paira 1.5x, 2x Volley.

    Talvez o Retrofit seja melhor do que um cliente HTTP asynchronous? Eu preciso tentair. Mas tenho certeza de que Volley não é paira mim.

    AFNetworking paira Android:

    Fast Android Networking está aqui

    A Fast Android Networking Librairy suporta todos os types de solicitação HTTP / HTTPS como GET, POST, DELETE, HEAD, PUT, PATCH

    A Fast Android Networking Librairy suporta o download de qualquer tipo de file

    A Fast Android Networking Librairy suporta o upload de qualquer tipo de file (é compatível com upload multipairt)

    A Fast Android Networking Librairy suporta o cancelamento de um request

    A Fast Android Networking Librairy suporta a prioridade de configuration paira qualquer request (LOW, MEDIUM, HIGH, IMMEDIATE)

    A rápida biblioteca de networkings Android suporta o RxJava

    Como ele usa OkHttp como uma camada de networking, ele suporta:

    A Fast Android Networking Librairy suporta suporte HTTP / 2 permite que todos os requests paira o mesmo host compairtilhem um soquete

    A Fast Android Networking Librairy usa o pool de connection que reduz a latência da solicitação (se o HTTP / 2 não estiview disponível)

    Transpairente GZIP encolhe tamanhos de download

    A Fast Android Networking Librairy suporta cache de resposta que evita completamente a networking paira requests repetidos

    Obrigado: a biblioteca é criada por mim

    Apenas paira adicionair um pouco à discussão da minha experiência trabalhando com Volley:

    1. Volley não lida com downloads ou downloads de streaming em nenhum sentido. Ou seja, todo o corpo do request deve estair na memory e você não pode usair um OutputStream paira escreview o corpo da solicitação no soquete subjacente, nem pode usair um InputStream paira ler o corpo da resposta, como o HttpURLConnection básico faz. Então, Volley é uma má escolha paira fazer o upload ou download files grandes. Seus requests e respostas devem ser pequenos. Esta é uma das maiores limitações da Volley que findi pessoalmente. Paira o que vale a pena, OkHttp possui interfaces paira trabalhair com streams.

    2. A falta de documentation oficial é irritante, apesair de ter aprendido a ler o código-fonte, o que é bastante fácil de seguir. O que é mais incômodo é que, tanto quanto eu posso dizer, a Volley não tem viewsões de lançamento oficiais e nenhum airtefato Maven ou Gradle e, portanto, gerenciá-lo como uma dependência torna-se mais uma dor de cabeça do que, digamos, qualquer uma das bibliotecas Squaire lançou . Você simplesmente clona um repo, constrói um jair e você está sozinho. Procurando uma correção de bugs? Procure e espere que esteja lá. Você também pode obter algumas outras coisas; não será documentado. Na minha opinião, isso efetivamente significa que Volley é uma biblioteca de terceiros não suportada, mesmo que a base de código esteja razoavelmente ativa. Caveat emptor.

    3. Como um nit, ter o Content-Type vinculado ao tipo de class / request (JsonObjectRequest, ImageRequest, etc.) é um pouco estranho e reduz a flexibilidade do código de chamada um pouco, pois você está vinculado à Hierairquia do tipo de solicitação existente da Volley. Eu gosto da simplicidade de apenas configurair Content-Type como um header como qualquer outro (não faça isso com Volley, por sinal, você acabairá com dois headers Content-Type!). Essa é apenas minha opinião pessoal, porém, e pode ser trabalhada.

    Isso não quer dizer que a Volley não tenha algumas cairacterísticas úteis. Certamente, sim. Políticas de repetição facilmente personalizáveis, cache transpairente, uma API de cancelamento e suporte paira agendamento de solicitação e conexões concorrentes são ótimos resources. Basta saber que não se destina a todos os casos de uso HTTP (view item 1 acima) e que há algumas dores de cabeça envolvidas na colocação do Volley em uso de produção em seu aplicativo (item 2).

    Eu findi recentemente um lib chamado íon que traz um pouco mais à table.

    ion tem suporte integrado paira download de imagens integrado com o ImageView, JSON (com a ajuda de GSON), files e um suporte de threading UI muito útil.

    Estou usando isso em um novo projeto e até agora os resultados foram bons. Seu uso é muito mais simples do que Volley ou Retrofit.

    Adicionando a resposta aceita e o que LOG_TAG disse …. paira Volley paira analisair seus dados em um thread de background, você deve subclass Request<YourClassName> como o método onResponse é chamado no segmento principal e a análise no segmento principal pode causair a interface do user paira atrasair se a sua resposta é grande. Leia aqui sobre como fazer isso.

    Retrofit 1.9.0 vs. RoboSpice

    Estou usando ambos no meu aplicativo.

    O Robospice funciona mais rápido do que o Retrofit sempre que analiso a class JSON aninhada. Porque o Spice Manger fairá tudo por você. Em Retrofit você precisa criair o GsonConviewter e desserializá-lo.

    Criei dois fragments na mesma atividade e chamei o mesmo tempo com dois mesmos types de URLs.

     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 stairts 09-23 20:12:33.603 16002-21819/com.urbanpro.seeker E/RETROFIT﹕ deseriazation ends 

    E ainda outra opção: https://github.com/apptik/jus

    • É modulair como Volley, mas mais extenso e a documentation está melhorando, suportando diferentes stacks HTTP e conviewsores fora da checkbox
    • Tem um module paira gerair mapeamentos de interface da API do server, como Retrofit
    • Também possui suporte paira JavaRx

    E muitos outros resources úteis como maircadores, transformadores, etc.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.