Pergunta em duas partes de um desenvolvedor do iOS que está aprendendo o Android, trabalhando em um projeto do Android que fará uma variedade de solicitações do JSON à imagem e ao download contínuo de áudio e vídeo:
No iOS, usei o projeto AFNetworking extensivamente. Existe uma biblioteca equivalente para Android?
Eu li o OkHTTP e o Retrofit by Square, além do Volley, mas ainda não tenho experiência em desenvolver com eles. Espero que alguém possa fornecer alguns exemplos concretos dos melhores casos de uso para cada um. Pelo que li, parece que o OkHTTP é o mais robusto dos três e pode lidar com os requisitos deste projeto (mencionado acima).
android
networking
retrofit
android-networking
Alfie Hanssen
fonte
fonte
Respostas:
Use Retrofit se estiver se comunicando com um serviço da Web. Use a biblioteca de pares Picasso se estiver baixando imagens. Use OkHTTP se você precisar executar operações HTTP fora do Retrofit / Picasso.
O Volley concorre aproximadamente com o Retrofit + Picasso. No lado positivo, é uma biblioteca. No lado negativo, é
umabiblioteca nãodocumentada,não suportada, "jogue o código por cima do muro e faça uma apresentação I | O nele".EDIT - Volley agora é oficialmente suportado pelo Google. Consulte o Guia do desenvolvedor do Google
A atualização utiliza o OkHTTP automaticamente, se disponível. Há uma essência de Jake Wharton que conecta o Volley ao OkHTTP.
Provavelmente você não usará nenhum deles para "streaming de download de áudio e vídeo", pela definição convencional de "streaming". Em vez disso, a estrutura de mídia do Android tratará dessas solicitações HTTP para você.
Dito isto, se você tentar fazer seu próprio streaming baseado em HTTP, o OkHTTP deverá lidar com esse cenário; Não me lembro como Volley lidaria com esse cenário. Nem o Retrofit nem o Picasso são projetados para isso.
fonte
Olhando para a perspectiva do Volley, aqui estão algumas vantagens para sua exigência:
O Volley, por um lado, está totalmente focado no tratamento de pequenas solicitações HTTP individuais. Portanto, se o tratamento de solicitações HTTP tiver algumas peculiaridades, o Volley provavelmente terá um gancho para você. Se, por outro lado, você tem uma peculiaridade na manipulação de imagens, o único gancho real que você tem é o ImageCache . "Não é nada, mas também não é muito!". mas tem mais outras vantagens, como Depois de definir suas solicitações, usá-las em um fragmento ou atividade é indolor, ao contrário do AsyncTasks paralelo
Prós e contras de Volley:
Então, o que há de bom no Volley?
A parte da rede não é apenas para imagens. O Volley pretende ser parte integrante do seu back-end. Para um novo projeto baseado em um serviço REST simples, isso pode ser uma grande vitória.
O NetworkImageView é mais agressivo quanto à limpeza de solicitações do que o Picasso e mais conservador em seus padrões de uso de GC. O NetworkImageView se baseia exclusivamente em referências de memória forte e limpa todos os dados da solicitação assim que uma nova solicitação é feita para um ImageView, ou assim que o ImageView sai da tela.
Atuação. Esta postagem não avaliará essa afirmação, mas eles claramente tomaram o cuidado de julgar seus padrões de uso de memória. O Volley também faz um esforço para fazer retornos de chamada em lote para o thread principal para reduzir a alternância de contexto.
O vôlei aparentemente também tem futuro. Confira RequestFuture se você estiver interessado.
Se você estiver lidando com imagens compactadas de alta resolução, o Volley é a única solução aqui que funciona bem.
O vôlei pode ser usado com o Okhttp (a nova versão do Okhttp suporta NIO para melhor desempenho)
O vôlei joga bem com o ciclo de vida da atividade.
Problemas com o Volley:
Como o Volley é novo, poucas coisas ainda não são suportadas, mas são corrigidas.
Solicitações de várias partes (solução: https://github.com/vinaysshenoy/enhanced-volley )
o código de status 201 é considerado um erro, o código de status de 200 a 207 é uma resposta bem-sucedida agora. (Corrigido: https://github.com/Vinayrraj/CustomVolley )
Atualização: na última versão do Google Volley, o bug dos códigos de status 2XX foi corrigido agora! Graças a Ficus Kirkpatrick!
é menos documentado, mas muitas pessoas suportam vôlei no github; documentação semelhante a java pode ser encontrada aqui . No site do desenvolvedor Android, você pode encontrar um guia para transmissão de dados de rede usando vôlei . E o código fonte do vôlei pode ser encontrado no Google Git
Para resolver / alterar a política de redirecionamento do Volley Framework, use o Volley com OkHTTP (CommonsWare mencionado acima)
Também é possível ler este carregamento de imagem do Volley Comparing com Picasso
Retrofit:
É lançado pela Square , oferece uma API REST muito fácil de usar (atualização: Voila! Com suporte a NIO)
Profissionais do Retrofit:
Comparado ao Volley, o código da API REST da Retrofit é breve e fornece excelente documentação da API e tem bom suporte nas comunidades! É muito fácil adicionar os projetos.
Podemos usá-lo com qualquer biblioteca de serialização, com tratamento de erros.
Atualização: - Existem muitas mudanças muito boas no Retrofit 2.0.0-beta2
Contras do Retrofit para a versão 1.6:
A funcionalidade de tratamento de erros relacionados à memória não é boa (nas versões anteriores do Retrofit / OkHttp), não tenho certeza se foi aprimorada com o suporte do Okio com Java NIO.
A assistência mínima de encadeamento pode resultar em retorno do inferno se usarmos isso de maneira inadequada.
(Todos os Contras acima foram resolvidos na nova versão do Retrofit 2.0 beta)
==================================================== ======================
Atualizar:
Benchmarks de desempenho do Android Async vs Volley vs Retrofit (milissegundos, menor valor é melhor):
(A informação acima das informações de benchmarking para retrofit melhorará com o suporte a java NIO porque a nova versão do OKhttp depende da biblioteca NIO Okio)
Quando usar o Volley ?!
Podemos usar o Volley quando precisamos carregar imagens e consumir APIs REST !, o sistema de enfileiramento de chamadas de rede é necessário para muitas solicitações n / w ao mesmo tempo! O Volley também possui melhor manipulação de erros relacionados à memória que o Retrofit!
OkHttp pode ser usado com o Volley, Retrofit usa OkHttp por padrão! Possui suporte SPDY , pool de conexões, cache de disco, compactação transparente! Recentemente, ele recebeu algum suporte do Java NIO com a biblioteca Okio .
Fonte, crédito: volley-vs-retrofit do Sr. Josh Ruesch
Nota: Sobre o streaming, depende do tipo de streaming que você deseja, como RTSP / RTCP.
fonte
MultipartEntityBuilder
nahttpmime
biblioteca com ele.RoboSpice vs. Vôlei
Em https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ
fonte
compile 'com.mcxiaoke.volley:library:1.0.+'
AFNetworking para Android:
Rápido Networking Android é aqui
A Rápida Biblioteca de Rede Android suporta todos os tipos de solicitação HTTP / HTTPS, como GET, POST, DELETE, HEAD, PUT, PATCH
Fast Android Networking Library suporta o download de qualquer tipo de arquivo
A Rápida Biblioteca de Rede Android suporta o upload de qualquer tipo de arquivo (suporta o upload de várias partes)
A biblioteca de rede rápida do Android suporta o cancelamento de uma solicitação
A Rápida Biblioteca de Rede Android suporta a definição de prioridade para qualquer solicitação (BAIXA, MÉDIA, ALTA, IMEDIATA)
Biblioteca de rede rápida do Android suporta RxJava
Como ele usa o OkHttp como uma camada de rede, ele suporta:
A biblioteca de rede rápida do Android suporta o suporte HTTP / 2, permitindo que todas as solicitações ao mesmo host compartilhem um soquete
A Biblioteca de rede rápida do Android usa o pool de conexões que reduz a latência de solicitações (se HTTP / 2 não estiver disponível)
GZIP transparente reduz tamanhos de download
A Rápida Biblioteca de Rede Android suporta cache de resposta, o que evita a rede completamente para solicitações repetidas
Obrigado: A biblioteca é criada por mim
fonte
Cliente assíncrono HTTP loopj vs. Volley
As especificidades do meu projeto são pequenas solicitações HTTP REST, a cada 1-5 minutos.
Eu uso um cliente HTTP assíncrono (1.4.1) por um longo tempo. O desempenho é melhor do que usar o httpClient do Apache baunilha ou uma conexão de URL HTTP. De qualquer forma, a nova versão da biblioteca não está funcionando para mim: a exceção entre bibliotecas diminui a cadeia de retornos de chamada.
A leitura de todas as respostas me motivou a tentar algo novo. Eu escolhi a biblioteca HTTP Volley.
Depois de usá-lo por algum tempo, mesmo sem testes, vejo claramente que o tempo de resposta caiu para 1,5x, 2x Volley.
Talvez o Retrofit seja melhor que um cliente HTTP assíncrono? Eu preciso tentar. Mas tenho certeza de que o Volley não é para mim.
fonte
Só para adicionar um pouco à discussão da minha experiência de trabalho com o Volley:
O Volley não lida com uploads ou downloads de streaming em nenhum sentido. Ou seja, todo o corpo da solicitação precisa estar na memória e você não pode usar um
OutputStream
para gravar o corpo do pedido no soquete subjacente, nem umInputStream
para ler o corpo da resposta, comoHttpURLConnection
faz o básico . Portanto, o Volley é uma má escolha para carregar ou baixar arquivos grandes. Seus pedidos e respostas devem ser pequenos. Essa é uma das maiores limitações do Volley que eu pessoalmente encontrei. Pelo que vale, o OkHttp possui interfaces para trabalhar com fluxos.A falta de documentação oficial é irritante, embora eu tenha conseguido contornar isso lendo o código-fonte, o que é bastante fácil de seguir. O que é mais incômodo é que, até onde eu sei, o Volley não tem versões oficiais de lançamento nem artefato Maven ou Gradle, e, portanto, gerenciá-lo como uma dependência se torna mais uma dor de cabeça do que, digamos, qualquer uma das bibliotecas que a Square lançou . Você apenas clona um repositório, constrói um frasco e fica sozinho. Procurando uma correção de bug? Buscar e espero que esteja lá. Você também pode obter outras coisas; não será documentado. Na minha opinião, isso significa efetivamente que o Volley é uma biblioteca de terceiros não suportada, mesmo que a base de código esteja razoavelmente ativa. Advertência emptor.
Como um nit, ter o Tipo de conteúdo vinculado ao tipo de classe / solicitação (JsonObjectRequest, ImageRequest etc.) é meio estranho e reduz um pouco a flexibilidade do código de chamada, pois você está vinculado à hierarquia de tipos de solicitação existente do Volley. Eu gosto da simplicidade de apenas definir o Tipo de Conteúdo como um cabeçalho como qualquer outro (a propósito, não faça isso com o Volley; você acabará com dois cabeçalhos do Tipo de Conteúdo!). Essa é apenas a minha opinião pessoal e pode ser contornada.
Isso não quer dizer que o Volley não tenha alguns recursos úteis. Certamente que sim. Políticas de repetição facilmente personalizáveis, armazenamento em cache transparente, uma API de cancelamento e suporte para agendamento de solicitações e conexões simultâneas são ótimos recursos. Saiba apenas que ele não se destina a todos os casos de uso HTTP (consulte o item 1 acima) e que existem algumas dores de cabeça envolvidas na colocação do Volley em uso de produção em seu aplicativo (item 2).
fonte
Recentemente, eu encontrei uma biblioteca chamada ion, que traz um pouco mais à mesa.
O ion possui suporte integrado para download de imagens integrado ao ImageView, JSON (com a ajuda do GSON), arquivos e um suporte de encadeamento de interface do usuário muito útil.
Estou usando em um novo projeto e até agora os resultados foram bons. Seu uso é muito mais simples que o Volley ou o Retrofit.
fonte
Adicionando à resposta aceita e ao que LOG_TAG disse ... para que o Volley analise seus dados em um encadeamento em segundo plano, você deve subclasse,
Request<YourClassName>
pois oonResponse
método é chamado no encadeamento principal e a análise no encadeamento principal pode causar um atraso na interface do usuário se sua resposta é grande. Leia aqui sobre como fazer isso.fonte
Retrofit 1.9.0 vs. RoboSpice
Estou usando os dois no meu aplicativo.
O Robospice funciona mais rápido que o Retrofit sempre que eu analiso a classe JSON aninhada. Porque o Spice Manger fará tudo por você. No Retrofit, você precisa criar o GsonConverter e desserializar.
Criei dois fragmentos na mesma atividade e liguei ao mesmo tempo com dois mesmos tipos de URLs.
fonte
E mais uma opção: https://github.com/apptik/jus
E muitos outros recursos úteis, como marcadores, transformadores, etc.
fonte