„Android“ tinklo bibliotekų palyginimas: „OkHTTP“, modifikavimas ir tinklinis

Dviejų dalių „Android“ iOS kūrėjo, kuris dirba su „Android“ projektu, klausimas, kuris pateiks daugybę JSON užklausų dėl garso ir vaizdo transliacijos:

  • „IOS“ naudoju AFNetworking projektą. Ar yra lygiavertė „Android“ biblioteka?

  • Aš perskaičiau „ OkHTTP“ ir „ Retrofit“ pagal sritis, taip pat Volley , bet jie vis dar neturi patirties su jais. Tikiuosi, kad kas nors gali pateikti konkrečių geriausių naudojimo atvejų pavyzdžių kiekvienam. Iš to, ką perskaičiau, atrodo, kad OkHTTP yra patikimiausias iš trijų, ir gali susidoroti su šio projekto reikalavimais (minėta aukščiau).

517
03 июня '13 в 20:47 2013-06-03 20:47 Alfie Hanssen yra nustatytas birželio 03 d. 13 val. 20:47 2013-06-03 20:47
@ 10 atsakymų

Tikiuosi, kad kas nors gali pateikti konkrečių geriausių naudojimo atvejų pavyzdžių kiekvienam.

Jei naudojate pokalbius su žiniatinklio paslauga, naudokite atnaujinimą. Jei įkeliate vaizdus, ​​naudokite „Picasso“ biblioteką. Jei norite atlikti HTTP operacijas, esančias už Retrofit / Picasso, naudokite „OkHTTP“.

Tinklinis maždaug konkuruoja su „Retrofit + Picasso“. Teigiama, kad tai yra viena biblioteka. Neigiamoje pusėje vienas nepatvirtintas nepatvirtintas dokumentas , „palikite kodą ant sienos ir paleiskite biblioteką aš | O ant jo.“

„EDIT“ - „Volley“ dabar oficialiai palaiko „Google“. Prašome apsilankyti „ Google“ kūrėjo vadove.

Iš to, ką aš perskaičiau, atrodo, kad OkHTTP yra patikimiausias iš 3

Įsigyta versija naudoja „OkHTTP“ automatiškai, jei yra. Yra „ Gake“ iš „Jake Wharton“ , kuris jungia „Volley“ su „OkHTTP“.

ir gali įvykdyti šio projekto reikalavimus (žr. aukščiau).

Jūs tikriausiai nenaudosite nė vieno iš jų „garso ir vaizdo įrašų parsisiuntimui pagal įprastą„ transliacijos “apibrėžtį. Vietoj to, „Android“ žiniasklaidos aplinka tvarkys šiuos HTTP prašymus.

Tuo pačiu metu, jei bandote vykdyti savo HTTP srautų srautą, „OkHTTP“ turėtų tvarkyti šį scenarijų; Aš nepamenu, kaip gerai Veyle būtų tvarkęs šį scenarijų. Tam nėra sukurta nei atnaujinimo, nei „Picasso“.

615
03 июня '13 в 21:18 2013-06-03 21:18 atsakymą pateikė „ CommonsWare“ birželio 13 d. 13 val. 21:18 2013-06-03 21:18

Žvelgiant į „Tinklinio“ perspektyvą, kai kurie privalumai:

Viena vertus, „Volley“ daugiausia dėmesio skiria atskirų mažų HTTP užklausų apdorojimui. Todėl, jei jūsų HTTP užklausos tvarkymas turi tam tikrų problemų, Volley tikriausiai turi jums kabliuką. Kita vertus, jei vaizdo apdorojimo metu jūs turite apgaulę , vienintelis realus, kurį turite, yra „ ImageCache“ . "Tai nėra nieko, bet tai nėra daug!" tačiau ji turi daugiau kitų privalumų. Kai nustatysite savo užklausas, jų naudojimas iš fragmento arba veiksmo yra neskausmingas, kitaip nei lygiagrečiai AsyncTasks

„Volley“ privalumai ir trūkumai:

Taigi, kas gera apie „Volail“?

  • Tinklo dalis skirta ne tik vaizdams. Tinklinis sukurtas taip, kad taptų neatskiriama nugaros galo dalimi. Naujam projektui, paremtam paprasta REST paslauga, tai galėtų būti didelė pergalė.

  • „NetworkImageView“ yra labiau agresyvi, palyginti su „Picasso“ valymo užklausomis, ir konservatyviau naudojasi GC. „NetworkImageView“ remiasi tik stipriomis nuorodomis į atmintį ir išvalo visus užklausos duomenis, kai tik pateikiamas naujas „ImageView“ prašymas, arba kai tik „ImageView“ perkeliama iš rėmo.

  • Pateikimas. Šis pranešimas nebus vertinamas šio teiginio, tačiau jie aiškiai pasirūpino, kad jų atminties naudojimo modeliai būtų pagrįsti. „Volley“ taip pat stengiasi suskirstyti atgalines paraiškas į pagrindinį sriegį, kad sumažėtų konteksto perjungimas.

  • Matyt, Volley taip pat turi ateities sandorius. Jei domitės, patikrinkite „RequestFuture“.

  • Jei dirbate su didelės skiriamosios gebos suspaustais vaizdais, „Volley“ yra vienintelis gerai veikiantis sprendimas.

  • „Volley“ galima naudoti su „Okhttp“ (nauja „Okhttp“ versija palaiko „NIO“ geresniam našumui)

  • Tinklinis susiduria su veiklos gyvavimo ciklu.

Problemos dėl tinklinio:
Kadangi „Volley“ yra nauja, dar nėra daug palaikoma, tačiau ji buvo nustatyta.

  1. Multicast užklausos (sprendimas: https://github.com/vinaysshenoy/enhanced-volley )

  2. būsenos kodas 201 laikomas klaida, statuso kodas nuo 200 iki 207 yra geras atsakymas. (Ištaisyta: https://github.com/Vinayrraj/CustomVolley )

    Atnaujinimas: naujausioje „Google salvo“ versijoje 2XX klaidų būsenos kodai yra nustatyti dabar Ficus Kirkpatrick dėka!

  3. ji yra mažiau dokumentuota, tačiau daugelis žmonių palaiko tinklelį github, java, nes dokumentaciją galima rasti čia . „Android Developer“ svetainėje galite rasti tinklo duomenų perdavimo programą naudodami „Volley“ . Ir šaltinio kodo tinklelį galima rasti „ Google Git“

  4. Naudokite „ Volley“ su „OkHTTP“ („CommonsWare“, minėta aukščiau), kad išspręstumėte / pakeistumėte tinklinio platformos peradresavimo politiką

Taip pat galite perskaityti šį tinklinio atvaizdų palyginimą naudojant „Picasso“

Pakeista:

Jis yra išleistas „ Square“ , tai labai paprasta naudoti „REST API“ (atnaujinta: „Voila!

Modernizavimo privalumai:

  • Palyginti su „Volley“, „Retrofit REST API“ yra trumpas ir suteikia puikią API dokumentaciją ir turi gerą bendruomenės paramą! Tai labai lengva įtraukti į projektus.

  • Mes galime jį naudoti su bet kokia serializacijos biblioteka, naudojant klaidų tvarkymą.

Atnaujinimas: - „Retrofit 2.0.0“ beta versijoje yra daug pakeitimų.

  • 1.6 versija su „OkHttp 2.0“ dabar priklauso nuo „Okio“ palaikymo „java.io“ ir „java.nio“, todėl lengva pasiekti, saugoti ir apdoroti duomenis naudojant „ByteString“ ir „Buffer“. (FYI: man primena Koush OIN biblioteką su NIO palaikymu!). Mes galime naudoti „ Retrofit“ su RxJava prisijungti ir prisijungti prie „REST“ skambučių naudojant „rxObservables“, kad būtų išvengta bjaurių atgalinio ryšio grandinių (siekiant išvengti pragaro atšaukimo).

1.6 versijos atnaujinimo trūkumai:

  • Atminties klaidų tvarkymo funkcija nėra labai gera (senesnėse „Retrofit / OkHttp“ versijose), nežinote, ar tai pagerėjo, jei „Okio“ palaiko „Java NIO“ palaikymą.

  • Jei netinkamai naudosime, minimalus sriegių palaikymas gali sukelti pragarą.

(Visi aukščiau pateikti sprendimai buvo išspręsti naujojoje „Retrofit 2.0 beta“ versijoje

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

Atnaujinti:

„Android Async vs„ Volley “/„ Modernizavimas “(milisekundės, mažesnė vertė yra geresnė):

2019

337
18 сент. atsakymas pateikiamas LOG_TAG 18 sep . 2013-09-18 06:33 '13, 6:33 am 2013-09-18 06:33

RoboSpice Vs. Tinklinis

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

  • RoboSpice (RS) yra paslauga pagrįsta ir pagarbesnė „Android“ filosofija nei „Volley“. „Volley“ yra srautas, o tai ne kaip fono apdorojimas „Android“. Galų gale jūs galite iškasti abu bibliotekas ir sužinoti, kad jos yra labai panašios, tačiau mūsų būdas apdoroti foną yra „Android“, o tai leidžia mums, pavyzdžiui, informuoti vartotojus, kad RS tikrai daro kažką fone, kad jis būtų sunku tinklui (iš tikrųjų tai nėra).
  • „RoboSpice“ ir tinklinis siūlo puikias funkcijas, pvz., Prioritetų nustatymą, pakartotinę politiką, prašymo atšaukimą. Tačiau RS siūlo daugiau: pažangesnę talpyklą ir didelį, su talpyklos valdymu, užklausų kaupimu, daugiau funkcijų, pvz., Pakeičiant laukiančią užklausą, dirbant su talpyklos galiojimu, nesiremiant serverio antraštėmis ir tt
  • „RoboSpice“ atlieka daugiau veiksmų už vartotojo sąsajos ribų. Tema: tinklinis deserialize jūsų POJO pagrindinėje temoje, kuri yra baisi man. Su RS, jūsų paraiška bus jautresnė.
  • Kalbant apie greitį, mums tikrai reikia metrikų. Dabar RS tapo labai greitas, bet vis dar neturime gabalo. Tinklinis teoriškai turėtų būti šiek tiek greitesnis, tačiau RS dabar yra didžiulė lygiagrečiai ... kas žino?
  • RoboSpice siūlo platų suderinamumo spektrą su plėtiniais. Jūs galite naudoti jį su okhttp, modifikacija, ormlite (beta), jackson, jackson2, gson, xml serializer, google http klientas, pavasario Android ... Gana daug. „Volley“ galima naudoti su „http“ >
  • Volley siūlo daugiau UI cukraus nei RS. Tinklinis suteikia „NetworkImageView“, RS suteikia spikistinį adapterį. Kalbant apie funkcionalumą, tai dar nėra, bet manau, kad šioje srityje Volley yra labiau pažengusi.
  • RoboSpice nuo išleidimo buvo nuspręsta daugiau nei 200 klaidų. Jis yra gana patvarus ir plačiai naudojamas gamyboje. Tinklinis yra mažiau subrendęs, tačiau jo naudotojų bazė turėtų sparčiai augti („Google“ efektas).
  • „RoboSpice“ yra centriniame „maven“ serveryje. Tinklinį sunku rasti;)
43
10 янв. Snicolo atsakymas, sausio 10 d 2014-01-10 21:16 '14, 21:16 2014-01-10 21:16

AFNetworking „Android“:

Greitas „Android“ tinklas čia

Greita „Android“ tinklo biblioteka palaiko visų tipų HTTP / HTTPS užklausas, pvz., GET, POST, DELETE, HEAD, PUT, PATCH

Greita „Android“ tinklo biblioteka palaiko bet kokio tipo failų atsisiuntimą.

Greita „Android“ tinklo biblioteka palaiko bet kokio tipo failų atsisiuntimą (palaiko kelių puslapių atsisiuntimą)

Greita „Android“ tinklo biblioteka palaiko užklausų atšaukimą

Greita „Android“ tinklo biblioteka palaiko prioritetų nustatymą bet kuriam užklausai (LOW, MEDIUM, HIGH, IMMEDIATE)

„Android Fast Network Library“ palaiko RxJava

Kadangi jis naudoja OkHttp kaip tinklo sluoksnį, jis palaiko:

Greita „Android“ tinklo biblioteka palaiko HTTP / 2 palaikymą, leidžiančią visiems to paties kompiuterio užklausoms bendrinti lizdą

„Fast Network Networking“ biblioteka naudoja ryšio poolą, kuris sumažina laiko laukti prašymo (jei HTTP / 2 nėra)

Skaidrus gzip sumažina atsisiuntimo dydį

Greita „Android“ tinklo biblioteka palaiko atsakymų talpyklą, kuri visiškai pašalina tinklą pakartotiniams prašymams

Ačiū: biblioteka buvo sukurta man

17
16 июля '16 в 18:39 2016-07-16 18:39 Atsakymą pateikė Amit Shekhar liepos 16 d. 16:39 2016-07-16 18:39

Async HTTP kliento kilpa vs Volley

Mano projekto specifika yra mažos HTTP REST užklausos, kas 1-5 minutės.

Aš ilgą laiką naudoju async HTTP klientą (1.4.1). Veiksmingumas yra geresnis nei naudojant Apache HTTP kliento ar HTTP URL. Bet kokiu atveju naujoji bibliotekos versija man neveikia: biblioteka, išskyrus išimtis, sumažina grandinės pakvietimus.

Visų atsakymų skaitymas paskatino mane išbandyti kažką naujo. Pasirinkau „Volley HTTP“ biblioteką.

Kai kurį laiką naudojote, net be testų, aiškiai matau, kad atsako laikas yra iki 1,5x, 2x Volley.

Galbūt „Retrofit“ yra geriau nei asinchroninis HTTP klientas? Man reikia pabandyti. Bet esu tikras, kad Volley ne man.

17
06 июня '14 в 11:07 2014-06-06 11:07 atsakymą pateikė Sergejus Vakulenko Birželio 06 '14, 11:07 2014-06-06 11:07

Tiesiog pridėkite šiek tiek prie diskusijos iš mano patirtos su Volley:

  • „Volley“ jokiu būdu neveikia srautinių parsisiuntimų ar atsisiuntimų. Tai reiškia, kad visas užklausos objektas turi būti atmintyje, ir negalite naudoti „ OutputStream “ užklausos kūno HttpURLConnection į pagrindinį lizdą, taip pat negalite naudoti InputStream atsakymo kūno skaitymui, nes pagrindo „ HttpURLConnection “ funkcija, todėl „Volley“ yra blogas pasirinkimas įkelti arba atsisiųsti didelius failus. Jūsų prašymai ir atsakymai turėtų būti nedideli. Tai yra vienas iš didžiausių tinklinio apribojimų, su kuriais aš asmeniškai susidūriau. Kas tai yra, „OkHttp“ turi sąsajas darbui su siūlais.

  • Oficialios dokumentacijos stoka yra erzina, nors man tai pavyko perskaityti skaitant šaltinio kodą, kuris yra gana lengvai suprantamas. Daugiau erzina tai, kad, kiek aš galiu pasakyti, tinklinis neturi oficialių leidinių ir „Maven“ ar „Gradle“ artefaktų versijų, todėl jo valdymas kaip priklausomybė tampa galvos skausmu, o ne bet kokia išleista „Square“ biblioteka. Jūs tiesiog klonuojate repo, statote stiklainį ir tu pats. Ieškote klaidų taisymo? Tiesioginis ir viltis. Jūs galite gauti kitų dalykų; jis nebus dokumentuojamas. Mano nuomone, tai iš tikrųjų reiškia, kad „Volley“ yra nepalaikoma trečiųjų šalių biblioteka, nors kodo bazė yra gana aktyvi. Įspėjimas.

  • Kaip gija, turinčio turinio tipą, susietą su klasės / užklausos tipu (JsonObjectRequest, ImageRequest ir tt), yra gana nepatogu ir šiek tiek sumažina telefono kodo lankstumą, nes esate susieti su Tinklinio tipo užklausų hierarchija. Man patinka „Content-Type“ diegimo tiesumas kaip antraštė, kaip ir bet kuris kitas (beje, nedarykite to su „Volley“, gausite du turinio tipo pavadinimus!). Tai tik mano asmeninė nuomonė, ir tai galima apeiti.

Tai nereiškia, kad Volley neturi naudingų funkcijų. Žinoma Puikios funkcijos yra lengvai pritaikomos atkūrimo taisyklės, skaidrios talpyklos, atšaukimo API ir parama planuojant užklausas ir lygiagrečius ryšius. Tiesiog žinokite, kad jis nėra skirtas visiems HTTP naudojimo būdams (žr. 1 punktą) ir kad yra keletas galvos skausmų, susijusių su Volley įtraukimu į gamybą jūsų paraiškoje (2 punktas).

10
28 авг. atsakymas duotas Jeff 28 rug. 2014-08-28 22:10 '14, 10:10 pm 2014-08-28 22:10

Neseniai rado „lib“ vadinamą joną , kuris prie stalo prideda papildomos informacijos.

„Ion“ turi įmontuotą atvaizdų atsisiuntimo palaikymą, integruotą su „ImageView“, „JSON“ (naudojant „GSON“), failus ir labai patogų vartotojo sąsajos sriegių palaikymą.

Aš jį naudoju naujame projekte ir iki šiol rezultatai buvo geri. Jo naudojimas yra daug lengviau nei „Volley“ arba „Retrofit“.

7
29 марта '15 в 6:28 2015-03-29 06:28 Atsakymą pateikė Tiago Gaspar kovo 15 d. 15, 06:28 2015-03-29 06:28

Modifikuoti 1.9.0 ir RoboSpice

Aš abu naudoju savo paraiškoje.

„Robospice“ yra greitesnė, nei perskaičiuojant, kai išanalizuoju įdėtą JSON klasę. Kadangi „Spice Manger“ padarys viską už jus. „Retrofit“ programoje turite sukurti „GsonConverter“ ir deserialiuoti jį.

Toje pačioje veikloje sukūriau du fragmentus ir tuo pačiu metu iškvietiau du identiškus 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 
3
23 сент. atsakymą pateikė Asthme Sep 23 2015-09-23 17:46 '15, 17:46, 2015-09-23 17:46

Pridėjus priimtą atsakymą ir tai, ką LOG_TAG ... sakė, kad Volley analizuoja jūsų duomenis fono Request<YourClassName> , turite Request<YourClassName> , nes onResponse metodas onResponse vadinamas pagrindiniu sriegiu, o pagrindinio gijos analizavimas gali sukelti vartotojo sąsajos uždelsimą, jei jūsų atsakymas yra didelis. Skaitykite čia, kaip tai padaryti.

3
16 марта '15 в 10:33 2015-03-16 10:33 atsakymas pateikiamas iki kovo 15 d. 15 val. 10:33 2015-03-16 10:33

Ir dar vienas variantas: https://github.com/apptik/jus

  • Jis yra modulinis, pavyzdžiui, „Volley“, tačiau labiau pažengęs, o dokumentacija tobulinama palaikant įvairius kaminus ir HTTP keitiklius iš dėžutės.
  • Jame yra modulis, skirtas serverio API sąsajos, pvz., „Retrofit“, žemėlapių kūrimui
  • Jis taip pat palaiko „JavaRx“

Ir daug kitų patogių funkcijų, pvz., Žymeklių, transformatorių ir kt.

1
21 марта '16 в 19:14 2016-03-21 19:14 atsakymas pateikiamas djodjo kovo 21 d. 16:14 2016-03-21 19:14