Android ağ kütüphanelerinin karşılaştırılması: OkHTTP, Retrofit ve Volley [kapalı]


579

Android'i öğrenen bir iOS geliştiricisinden iki parçalı soru, JSON'dan görüntüye ses ve video akışının indirilmesine kadar çeşitli istekler yapacak bir Android projesi üzerinde çalışıyor:

  1. İOS'da ben kullandım AFNetworking yoğun projeyi. Android için eşdeğer bir kütüphane var mı?

  2. Ben üzerinde okudum OkHTTP ve Retrofit Meydanı yanı sıra tarafından Volley ancak henüz tecrübe onlarla gelişmekte yok. Birisinin her biri için en iyi kullanım örneklerinden somut örnekler vermesini umuyorum. Okuduğum kadarıyla, OkHTTP üçünün en sağlamı gibi görünüyor ve bu projenin gereksinimlerini karşılayabilir (yukarıda bahsedildi).


3
HttpUrlConnection'ın dahili uygulamasını kullanıyorsanız, HttpUrlConnection öğesinin POST isteklerinde sessiz yeniden deneme kullandığını düşünmelisiniz. Bu bana çok zarar verdi. Daha fazla bilgi için burayı okuyun: stackoverflow.com/a/37675253/2061089
oli

1
herhangi bir ağ kütüphaneleri listesi gerekiyorsa blog yazıma
Manohar Reddy

Volley, eski Apache, HttpUrlConnection, Apache-4 veya OkHttp'i çalıştırabilir. Retrofit gerçekten sadece OkHttp'in nerede çalışır. Güçlendirme yapılandırması çok daha kolaydır.
bitsabhi

Yanıtlar:


647

Birisinin her biri için en iyi kullanım örneklerinden somut örnekler vermesini umuyorum.

Bir Web servisiyle iletişim kuruyorsanız Retrofit kullanın. Görüntüleri indiriyorsanız, akran kütüphanesi Picasso'yu kullanın. Retrofit / Picasso dışında kalan HTTP işlemleri yapmanız gerekiyorsa OkHTTP'yi kullanın.

Volley kabaca Retrofit + Picasso ile yarışıyor. Artı tarafta, bir kütüphane. Eksi tarafta, belgelenmemiş, desteklenmeyen, "kodu duvarın üstüne at ve I | O sunumu yap" kütüphanesi.

EDIT - Volley artık resmi olarak Google tarafından destekleniyor. Lütfen Google Geliştirici Kılavuzu'na bakın

Okuduğum kadarıyla, OkHTTP 3'ün en sağlamı gibi görünüyor

Retrofit, mevcutsa otomatik olarak OkHTTP kullanır. Jake Wharton'dan Volley'i OkHTTP'ye bağlayan bir Gist var .

ve bu projenin (yukarıda belirtilen) gereksinimlerini karşılayabilir.

Muhtemelen bunların hiçbirini, geleneksel "akış" tanımıyla "ses ve video akışını indirmek" için kullanamazsınız. Bunun yerine, Android'in medya çerçevesi bu HTTP isteklerini sizin için halledecektir.

Bununla birlikte, kendi HTTP tabanlı akışınızı yapmaya çalışacaksanız, OkHTTP bu senaryoyu işlemelidir; Volley'in bu senaryoyu ne kadar iyi ele alacağını hatırlamıyorum. Ne Retrofit ne de Picasso bunun için tasarlanmamıştır.


4
Kısa cevap için @CommonsWare teşekkürler ve Volley belgesiz steez notu (diğer projelere kıyasla bu izlenim, esp var). Kesinlikle yerden şeyleri almama yardımcı olur.
Alfie Hanssen

18
@CommonsWare'den bir başka harika cevap. Birisi RoboSpice'in tüm bunlara nasıl uyduğunu takip edebilir mi?
user1923613

3
@ user1923613 github.com/octo-online/robospice sonra kullanım robospice gerek şebeke aramaları için voleybolu kullanıyorsanız !, voleybolu (kullanarak ağ aramalar için do Robospice, Robospice destekleri kutunun dışında kalanlar bundan şeylerin çoğunu yapar Spring Android veya Google Http Client veya Retrofit) .güçlü ağ istemcisi ile hızlı ağ ve görüntü yükleme istiyorsanız voleybolu gidebilirsiniz! ancak daha iyi performans ve bellek sızıntılarından kaçınmak için Robospice'i kullandığınız normal android async görevini değiştirebilirsiniz!
LOG_TAG

4
@frostymarvelous: Belgelenmemiş ve desteklenmeyenlerin yeterli gerekçe olduğunu hissediyorum. Google, bunun gibi daha resmi bir şekilde işlemek için bir sisteme sahip değil (ör. Android Destek Kütüphanesi). Bu yanıttan bu yana geçen iki yıl içinde, artı tarafta, kodun resmi olmayan bir şekilde resmi olmayan bir şekilde paketlenmesi de dahil olmak üzere bir miktar topluluk desteği var.
CommonsWare

4
@AbhinavVutukuri: İki yıldan uzun bir süre önce bir cevap hakkında yorum yapıyorsunuz. O zamanlar hiçbir belge yoktu.
CommonsWare

361

Volley perspektifine bakmak, gereksiniminiz için bazı avantajlar:

Volley, bir yandan tamamen bireysel, küçük HTTP isteklerini ele almaya odaklanmıştır. HTTP istek işleminizde bazı tuhaflıklar varsa, Volley muhtemelen sizin için bir kancaya sahiptir. Öte yandan, görüntü işlemede bir tuhaflık varsa, sahip olduğunuz tek gerçek kanca ImageCache'dir . "Hiçbir şey değil, ama çok da değil!" ancak isteklerinizi tanımladıktan sonra, bir parçanın veya aktivitenin içinden kullanmak paralel AsyncTasks'ın aksine ağrısızdır

Volley'nin artıları ve eksileri:

Volley'nin nesi güzel?

  • Ağ bölümü yalnızca görüntüler için değil. Volley, arka ucunuzun ayrılmaz bir parçası olarak tasarlanmıştır. Basit bir REST hizmetine dayanan yeni bir proje için bu büyük bir kazanç olabilir.

  • NetworkImageView, talep temizleme konusunda Picasso'dan daha agresif ve GC kullanım modellerinde daha muhafazakar. NetworkImageView yalnızca güçlü bellek referanslarına dayanır ve bir ImageView için yeni bir istek yapılır yapılmaz veya ImageView ekran dışına çıkar çıkmaz tüm talep verilerini temizler.

  • Verim. Bu gönderi bu iddiayı değerlendirmeyecek, ancak bellek kullanım kalıplarında mantıklı olmaya özen gösterdiler. Volley ayrıca içerik geçişini azaltmak için ana iş parçacığındaki geri çağrıları topluyor.

  • Volley'nin de gelecekleri var. Eğer ilgileniyorsanız RequestFuture göz atın.

  • Yüksek çözünürlüklü sıkıştırılmış görüntülerle uğraşıyorsanız, Volley burada iyi çalışan tek çözümdür.

  • Volley, Okhttp ile kullanılabilir (Okhttp'nin yeni sürümü, daha iyi performans için NIO'yu destekler)

  • Volley, Etkinlik yaşam döngüsü ile iyi oynuyor.

Volley ile İlgili Sorunlar:
Volley yeni olduğu için henüz birkaç şey desteklenmiyor, ancak düzeltildi.

  1. Çok Parçalı İstekler (Çözüm: https://github.com/vinaysshenoy/enhanced-volley )

  2. durum kodu 201 bir hata olarak alınır, 200'den 207'ye kadar olan durum kodu şu anda başarılı yanıtlardır (Sabit: https://github.com/Vinayrraj/CustomVolley )

    Güncelleme: Google voleybolu en son sürümünde, 2XX Durum kodları hatası düzeltildi ! Ficus Kirkpatrick sayesinde!

  3. daha az belgelenmiştir ancak çoğu insan github'da voleybolu desteklemektedir, java benzeri belgeler burada bulunabilir . Android geliştirici web sitesinde, Voleybolu Ağ Verilerinin Aktarılması için rehber bulabilirsiniz . Ve volley kaynak kodu Google Git'te bulunabilir

  4. Volley Framework Yönlendirme Politikasını çözmek / değiştirmek için OkHTTP ile Volley kullanın (CommonsWare yukarıda belirtilmiştir)

Ayrıca bu karşılaştırma Volley görüntü yükleme Picasso ile okuyabilirsiniz

Güçlendirme:

Square tarafından piyasaya sürüldü , REST API'lerinin kullanımı çok kolay (Güncelleme: NIO desteği ile Voila!)

Güçlendirme Artıları:

  • Volley ile karşılaştırıldığında, Retrofit'in REST API kodu kısadır ve mükemmel API belgeleri sağlar ve topluluklarda iyi bir desteğe sahiptir! Projelere eklemek çok kolay.

  • Hata işleme ile herhangi bir serileştirme kitaplığıyla kullanabiliriz.

Güncelleme: - Retrofit 2.0.0-beta2'de çok iyi değişiklikler var

  • OkHttp 2.0 ile Retrofit sürümü 1.6 şimdi bağlıdır Okio destek için java.io ve java.nio erişimi, mağazaya çok daha kolay hale getirir ve kullanarak verilerinizi işlemek bytestring ve Tampon CPU ve bellek kaydetmek için bazı akıllı şeyler yapmak. (FYI: Bu bana Koush'ın NIO desteği olan OIN kütüphanesini hatırlatıyor !) Çirkin geri arama zincirlerinden kaçınmak için (geri arama cehenneminden kaçınmak için!) Rx çağrılarını kullanarak RxJava ile birlikte Retrofit'i RxJava ile birlikte kullanabiliriz .

Sürüm 1.6 için Güçlendirme Eksileri:

  • Bellekle ilgili hata işleme işlevselliği iyi değil (Retrofit / OkHttp'nin eski sürümlerinde) Okio with Java NIO desteği ile geliştirilmiş olup olmadığından emin değil.

  • Bunu uygun olmayan bir şekilde kullanırsak, minimum diş açma yardımı cehenneme geri dönebilir.

(Tüm Eksileri Retrofit 2.0 beta'nın yeni sürümünde çözülmüştür)

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

Güncelleme:

Android Async vs Volley vs Retrofit performans testleri (milisaniye, düşük değer daha iyi):

Android Async vs Volley vs Retrofit performans karşılaştırmaları

(Retrofit Benchmarks bilgilerinin üzerindeki FYI, java NIO desteği ile gelişecektir çünkü OKhttp'nin yeni sürümü NIO Okio kütüphanesine bağımlıdır)

Değişen tekrarlara sahip üç testin hepsinde (1-25 kez), Volley% 50 ila% 75 daha hızlıydı. Retrofit, AsyncTasks'tan% 50 ila% 90 gibi etkileyici bir hızla saat hızına ulaştı ve aynı uç noktaya aynı sayıda çarptı. Gösterge Tablosu test paketinde bu, verilerin birkaç saniye daha hızlı yüklenmesi / ayrıştırılması anlamına gelir. Bu büyük bir gerçek dünya farkıdır. Testleri adil hale getirmek için, AsyncTasks / Volley süreleri, Retrofit'in sizin için otomatik olarak yaptığı gibi JSON ayrıştırmasını içeriyordu.

RetroFit Benchmark Testinde Kazandı!

Sonunda, başvurumuz için Retrofit ile gitmeye karar verdik. Sadece gülünç derecede hızlı değil, aynı zamanda mevcut mimarimizle de oldukça iyi örtüşüyor. API'larımız için çok az çaba göstererek veya hiç çaba harcamadan otomatik olarak hata işleme, önbellekleme ve sayfalandırma gerçekleştiren bir üst Geri Arama Arayüzü oluşturabildik. Retrofit'te birleştirmek için, modellerimizi GSON uyumlu hale getirmek, birkaç basit arayüz yazmak, eski API'dan işlevleri silmek ve AsyncTasks'ı kullanmamak için fragmanlarımızı değiştirmek için değişkenlerimizi yeniden adlandırmamız gerekiyordu. Şimdi tamamen dönüştürülmüş birkaç parçamız var, oldukça ağrısız. Üstesinden gelmemiz gereken bazı büyüyen ağrılar ve sorunlar vardı, ancak genel olarak sorunsuz gitti. Başlangıçta birkaç teknik sorun / hatayla karşılaştık, ancak Square'de bize yardımcı olabilecek harika bir Google+ topluluğu var.

Volley ne zaman kullanılır ?!

Görüntüleri yüklememiz ve REST API'leri tüketmemiz gerektiğinde Volley'i kullanabiliriz, aynı anda birçok n / w isteği için ağ çağrısı kuyruk sistemi gereklidir! ayrıca Volley, Retrofit!

OkHttp Volley ile kullanılabilir, Retrofit varsayılan olarak OkHttp kullanır ! It has spdy destek, bağlantı havuzu, disk önbelleği, şeffaf sıkıştırma! Son zamanlarda, Okio kütüphanesi ile java NIO desteği var .

Kaynak, kredi: volley-vs-retrofit Bay Josh Ruesch

Not: Akış hakkında, RTSP / RTCP gibi istediğiniz akış türüne bağlıdır.


@ Jan1337z +1 bilgi için! Güncelledim! android.googlesource.com/platform/frameworks/volley
LOG_TAG

4
@LOG_TAG RoboSpice'i örneklemde karşılaştırmak ilginç olurdu. Bir Retrofit modülü bile sunuyoruz, bu yüzden bunun çok az değişiklik gerektireceğine inanıyorum. Kaynak bir yerde mevcut mu? RS'nin avantajı, ağ isteklerini gerçekleştiren etkinliğin yaşam döngüsünü düzgün bir şekilde ele almasıdır ve ayrıca şeffaf önbellekleme sağlıyoruz, sanırım ek bir retrofit talebine göre ek yük küçük olacaktır.
Snicolas

@Snicolas Josh Ruesch blogunda bu kıyaslama sonuçlarını aldım , Ficus Kirkpatrick (Volley kurucusu), Josh Ruesch arasındaki dönüşümleri görebilirsiniz! Henüz test projesini hiçbir yerde paylaşmadı! FYI Ben sadece bu bildirim sorunu karşı karşıya retrofit örnek ile RoboSpice öğrenmeye başladım :)
LOG_TAG

3
Selam! Volley ile Multipart Talepleri Hakkında, biz kullanabilirsiniz düşünüyorum MultipartEntityBuilderiçinde httpmimeonunla kütüphanede.
BNK

2
Bu kriterleri başka kimse doğruladı mı? Apache http kütüphanesi M'de kullanımdan kaldırıldığı için (ve bunu çok parçalı oluşturucu için kullanıyordum), ağ kodumu Retrofit'e geçirmeye karar verdim. Başlangıçta sunucudan bir grup nesne almak için GET çağrılarından birini değiştirdim. (Kendi JSON ayrıştırma ile) Retrofit vs AsyncTask zamanladı. Performans çok yakındı, tablonun "Bir Tartışma" sütununda gösterildiği gibi 3 kat iyileştirme değildi. Verilen kod çok daha temiz ve kendi JSON ayrıştırıcısını yazmak zorunda kalmadım, ancak tek bir GET isteği için iyileştirme yoktu.
Gary Kipnis

44

RoboSpice Vs. Volley

Gönderen https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ

  • RoboSpice (RS) hizmet tabanlıdır ve Android felsefesine Volley'den daha saygılıdır. Volley iplik tabanlıdır ve bu, Android'de arka plan işlemenin gerçekleşmesi gereken yol değildir. Nihayetinde, her iki kütüphaneyi de kazabilir ve oldukça benzer olduklarını öğrenebilirsiniz, ancak arka plan işleme yöntemimiz daha fazla Android odaklıdır, örneğin, kullanıcılara RS'nin arka planda bir şey yaptığını söylememize izin verir. volley için zor (aslında hiç değil).
  • RoboSpice ve volley, önceliklendirme, yeniden deneme politikaları, istek iptali gibi hoş özellikler sunar. Ancak RS daha fazlasını sunar: daha gelişmiş bir önbellekleme ve bu büyük bir önbellek yönetimi, istek toplama, bekleyen bir isteğe yanıt verme, sunucu üstbilgilerine güvenmeden önbellek süresinin dolması gibi daha fazla özellik vb.
  • RoboSpice UI iş parçacığı dışında daha fazlasını yapar: volley POJO'larınızı ana iş parçacığının serisini kaldıracak, bu da aklıma korkunç. RS ile uygulamanız daha duyarlı olacaktır.
  • Hız açısından, kesinlikle metriklere ihtiyacımız var. RS şimdi çok hızlı bir şekilde arttı, ama yine de buraya koyacağımız rakam yok. Volley teorik olarak biraz daha hızlı olmalı, ama RS artık büyük ölçüde paralel ... kim bilir?
  • RoboSpice, uzantılarla geniş bir uyumluluk aralığı sunar. Okhttp, retrofit, ormlite (beta), jackson, jackson2, gson, xml serileştirici, google http istemcisi, bahar android ... ile kullanabilirsiniz. Volley ok http ile kullanılabilir ve gson kullanır. bu kadar.
  • Volley, RS'den daha fazla UI şekeri sunuyor. Volley NetworkImageView sağlar, RS ise bir spicelist adaptör sağlar. Özellik açısından şu ana kadar değil, ama Volley'nin bu konuda daha gelişmiş olduğuna inanıyorum.
  • RoboSpice'te ilk çıkışından bu yana 200'den fazla hata çözüldü. Oldukça sağlam ve üretimde yoğun olarak kullanılıyor. Volley daha az olgunlaşır, ancak kullanıcı tabanı hızlı büyüyor olmalıdır (Google etkisi).
  • RoboSpice, maven merkezinde mevcuttur. Volley bulmak zor;)

Robospice, REST çağrısı için android hizmetlerini kullanıyor, Robospice ile gley ayrıştırma çabalarını en aza indirgemek için Retrofit ile Robospice'i kullanabilir miyiz? (emin değilim sormak için doğru qsn) Ben sadece hizmet ile voleybolu arıyorum!
LOG_TAG

1
Servis ile voleybol temelde RS. Veya kronolojik olarak, Volley hizmetsiz RS ve diğer bazı özellikler eksik. Ve evet, RS ile Retrofit kullanabilir ve hatta isterseniz okhttp ekleyebilirsiniz.
Snicolas

7
Voleybolu bulmak neden zor? compile 'com.mcxiaoke.volley:library:1.0.+'
Rob

1
@ Mcxiaoke klonunun müsait olmadığı bir zaman vardı. Uygulamanıza elle voleybol eklemeniz gerekiyordu.
ayaz

"voleybolu ana başlıktaki POJO'larınızın serisini kaldıracaktır" Döndürülen JSON verilerini alabilir ve bu bir sorunsa ayrı bir iş parçacığının serisini kaldırabilirsiniz.
AndroidDev

20

Android için AFNetworking:

Hızlı Android Ağ olduğunu burada

Hızlı Android Ağ Kütüphanesi GET, POST, DELETE, HEAD, PUT, PATCH gibi her türlü HTTP / HTTPS isteğini destekler

Fast Android Networking Library her türlü dosyayı indirmeyi destekler

Hızlı Android Ağ Kütüphanesi her tür dosyanın yüklenmesini destekler (çok parçalı yüklemeyi destekler)

Hızlı Android Ağ Kütüphanesi, bir isteğin iptalini destekler

Hızlı Android Ağ Kütüphanesi, herhangi bir isteğe (DÜŞÜK, ORTA, YÜKSEK, HEMEN) öncelik tanımlamayı destekler

Hızlı Android Ağ Kütüphanesi RxJava'yı destekler

Bir ağ katmanı olarak OkHttp kullandığından şunları destekler:

Hızlı Android Ağ Kütüphanesi HTTP / 2 desteğini destekler Aynı ana bilgisayardan gelen tüm isteklerin bir soketi paylaşmasına izin verir

Hızlı Android Ağ Kitaplığı, istek gecikmesini azaltan bağlantı havuzu kullanır (HTTP / 2 mevcut değilse)

Şeffaf GZIP indirme boyutlarını küçültür

Hızlı Android Ağ Kütüphanesi, tekrarlanan istekler için ağı tamamen önleyen yanıt önbelleğini destekler

Teşekkürler: Kütüphane benim tarafımdan oluşturuldu


1
Kitaplığınızın HTTP / 2'yi desteklediğini belirtirsiniz, ancak HTTP / 2 desteği için bir API gereksinimi olup olmadığını söylemezsiniz. Anladığım kadarıyla, Android API seviyesinin 5.0'dan düşük olması, HTTP / 2'yi desteklemek için doğru SSL şifreleme yöntemlerine sahip değildi. Vurmak değil, sadece önerilen çözümü tam olarak değerlendirmeye çalışın.
DoctorD

@AmitShekhar: Sadece Android'de API çağrısı için hangisinin en iyi olduğunu bilmek istedim. Android Networking Library'yi kullanıyorum, bu yüzden Retrofit, Volley veya Android Networking'i uygulamak harika olan nedir?
Parth Bhayani

@Amit Shekhar Özellikle düşük internet senaryoları söz konusu olduğunda, çok parçalı görüntü yükleme için Hızlı Android Ağı ne kadar verimli?
user3135923

18

Async HTTP istemcisi loopj ve Volley

Projemin özellikleri 1-5 dakikada bir küçük HTTP REST istekleridir.

Uzun zamandır bir zaman uyumsuz HTTP istemcisi (1.4.1) kullanıyorum. Performans, vanilya Apache httpClient veya bir HTTP URL bağlantısı kullanmaktan daha iyidir. Her neyse, kütüphanenin yeni sürümü benim için çalışmıyor: kütüphane inter istisna geri arama zincirini kesti.

Tüm cevapları okumak beni yeni bir şey denemeye motive etti. Volley HTTP kütüphanesini seçtim.

Bir süre kullandıktan sonra, testler olmadan bile, tepki süresinin 1.5x, 2x Volley'e kadar olduğunu açıkça görüyorum.

Belki Retrofit, zaman uyumsuz bir HTTP istemcisinden daha iyidir? Denemem lazım. Ama eminim Volley benim için değil.


Retrofit Vs AsyncHttpClient ??? hakkında herhangi bir analiz Cevabınız evet ise lütfen gönderin @Sergey
IshRoid


Birkaç yıldır AsyncHttpClient kullanıyorum. Kötü yanı, github repo'nun taahhüt olmadan 2 yıl olmasıdır.
Vitor Hugo Schwaab

Artık gerçek değil, async http çok eski moda. Başka bir kütüphaneye geçmeyi düşünün. Voleybolu da çok iyi bir seçim haline geldi.
Sergey Vakulenko

Sergey, @IshRoid Hala AsyncHttpClient kullanıyorum sorunuzun cevabını arıyorum RxJava Retrofit veya başka bir şey kullanmalıyım .. Lütfen bana bildirin .. hevesle yanıt bekliyorum
Deep Dave

11

Volley ile çalışma deneyimimden tartışmaya biraz eklemek için:

  1. Volley, hiçbir şekilde akış yüklemelerini veya indirmeleri işlemez. Olduğunu, tüm istek vücut hafızasında olmak zorunda ve bir kullanamazsınız OutputStreamyatan sokete istek gövdesini yazmak için, ne de bir kullanabilir InputStreamtemel olarak, tepki vücudu okumak için HttpURLConnectionyapar. Bu nedenle, Volley büyük dosyaları yüklemek veya indirmek için kötü bir seçimdir. İstekleriniz ve yanıtlarınız küçük olmalıdır. Bu, Volley'nin şahsen karşılaştığım en büyük kısıtlamalarından biri. Değeri için, OkHttp akışlarla çalışmak için arayüzlere sahiptir.

  2. Resmi belgelerin eksikliği sinir bozucu, ancak takip etmek oldukça kolay olan kaynak kodunu okuyarak bunu çözebildim. Daha da rahatsız edici olan, Volley'in görebildiğim kadarıyla, Volley'nin resmi sürüm sürümleri ve Maven veya Gradle yapıları olmaması ve bu nedenle bunu bağımlılık olarak yönetmek, Square'in yayınladığı kütüphanelerden daha çok baş ağrısı haline gelmesidir. . Sadece bir repoyu klonlar, bir kavanoz inşa edersin ve kendi başınasın. Hata düzeltmesi mi arıyorsunuz? Getir ve umarım oradadır. Siz de başka şeyler alabilirsiniz; belgelenmeyecek. Bence bu, kod tabanı makul derecede aktif olmasına rağmen Volley'nin desteklenmeyen bir 3. taraf kütüphanesi olduğu anlamına geliyor. Uyarı emptor.

  3. Nit olarak, Content-Type'ın sınıfa / istek türüne (JsonObjectRequest, ImageRequest, vb.) Bağlı olması biraz gariptir ve Volley'in mevcut İstek türü hiyerarşisine bağlı olduğunuz için arama kodunun esnekliğini biraz azaltır. Content-Type'ı başkaları gibi bir başlık olarak ayarlamanın kolaylığını seviyorum (bu arada Volley ile yapmayın; iki Content-Type başlığı ile sonuçlanacaksınız!). Bu sadece benim kişisel görüşüm ve etrafta çözülebilir.

Bu Volley'in bazı yararlı özellikleri olmadığı anlamına gelmez. Kesinlikle öyle. Kolayca özelleştirilebilir yeniden deneme ilkeleri, şeffaf önbellekleme, iptal API'si ve istek planlama ve eşzamanlı bağlantılar için destek harika özelliklerdir. Sadece tüm HTTP kullanım durumları için tasarlanmadığını (yukarıdaki madde 1'e bakın) ve Volley'i uygulamanızda üretim kullanımına sokmada bazı baş ağrıları olduğunu (madde 2) bilmeniz yeterlidir.


Tam bellek yükleme, yavaşça beni öldürdüğüm şey. Tanrıya şükür başka biri bahsetti.
TheSunny

Kütüphane ayrıca istek gövdesinin defansif bir kopyasını oluşturabilir, bu nedenle büyük istekler için bellek tüketimi beklediğinizden iki kat daha fazla olabilir.
Jeff

9

Son zamanlarda masaya biraz ekstra getiren ion adında bir lib buldum .

ion, ImageView, JSON (GSON yardımı ile), dosyalar ve çok kullanışlı bir UI iş parçacığı desteği ile entegre görüntü indirme için yerleşik desteğe sahiptir.

Yeni bir projede kullanıyorum ve şimdiye kadar sonuçlar iyi oldu. Kullanımı Volley veya Retrofit'ten çok daha basittir.


2
iyon vs retrofit, hangisini önerirsiniz?
Sreekanth Karumanaghat

Güçlendirme iyondan daha iyi
Rajesh Koshti

4

Kabul edilen yanıta ve LOG_TAG'ın söylediklerine ek olarak .... Volley'nin verilerinizi bir arka plan iş parçacığında ayrıştırması için Request<YourClassName>, onResponseyöntem ana iş parçacığında çağrıldığından alt sınıf yapmanız gerekir ve ana iş parçacığında ayrıştırma, yanıtınızın yanıt vermesi durumunda kullanıcı arayüzünün gecikmesine neden olabilir büyüktür. Bunu nasıl yapacağınızı buradan okuyun .


1
doğru ... voleybolu tepki gerçekten büyük olduğunda ui'nin gecikmesine neden olan ana iplik üzerindeki yanıtı ayrıştırır.
Gopal Singh Sirvi

3

Retrofit 1.9.0 ve RoboSpice

Her ikisini de uygulamamda kullanıyorum.

Yuvalanmış JSON sınıfını ayrıştırdığımda Robospice, Retrofit'ten daha hızlı çalışır. Çünkü Spice Manger her şeyi sizin için yapacak. Retrofit'te GsonConverter oluşturmalı ve serisini kaldırmalısınız.

Aynı etkinlikte iki parça oluşturdum ve aynı anda iki tür URL ile aradım.

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

2

Ve yine başka bir seçenek: https://github.com/apptik/jus

  • Volley gibi modüler, ancak daha geniş ve dokümantasyon gelişiyor, farklı HTTP yığınlarını ve dönüştürücülerini kutudan çıkarıyor
  • Retrofit gibi sunucu API arayüzü eşlemeleri oluşturmak için bir modülü vardır
  • Ayrıca JavaRx desteği de var

İşaretleyiciler, transformatörler vb.Gibi diğer kullanışlı özellikler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.