Android नेटवर्किंग पुस्तकालयों की तुलना: OkHTTP, रेट्रोफिट और वॉली [बंद]


579

एंड्रॉइड सीखने वाले एक iOS डेवलपर से दो-भाग का सवाल, एक एंड्रॉइड प्रोजेक्ट पर काम करना जो JSON से छवि और ऑडियो और वीडियो डाउनलोड करने के लिए कई तरह के अनुरोध करेगा:

  1. IOS पर मैंने AFNetworking प्रोजेक्ट का बड़े पैमाने पर उपयोग किया है । क्या एंड्रॉइड के लिए एक समान पुस्तकालय है?

  2. मैंने ओकेएचटीपी और स्क्वायर द्वारा रिट्रोफिट पर पढ़ा है , साथ ही वॉली भी लेकिन अभी तक उनके साथ विकसित होने का अनुभव नहीं है। मैं उम्मीद कर रहा हूँ कि कोई व्यक्ति प्रत्येक के लिए सर्वोत्तम उपयोग के मामलों के कुछ ठोस उदाहरण प्रदान कर सकता है। मैंने जो पढ़ा है, उससे ऐसा लगता है कि ओकेएचटीटीपी तीनों में से सबसे मजबूत है, और इस परियोजना की आवश्यकताओं (ऊपर उल्लेखित) को संभाल सकता है।


3
यदि आप HttpUrlConnection के आंतरिक कार्यान्वयन का उपयोग कर रहे हैं, तो आपको यह विचार करना चाहिए कि HttpUrlConnection POST- अनुरोधों पर मौन रिट्रीट का उपयोग करता है। जिससे मुझे बहुत नुकसान हुआ। अधिक जानकारी के लिए यहां पढ़ें: stackoverflow.com/a/37675253/2061089
oli

1
अगर किसी को सभी नेटवर्किंग लाइब्रेरी की सूची चाहिए, तो आप इसे मेरे ब्लॉग पोस्ट androidredman.wordpress.com/2017/06/26/…
मनोहर रेड्डी

वॉली विरासत अपाचे, HttpUrlConnection, Apache-4 या OkHttp चला सकते हैं। जहाँ रेट्रोफिट वास्तव में केवल OkHttp के रन हैं। रेट्रोफिट को कॉन्फ़िगर करना बहुत आसान है।
बिट्सभी

जवाबों:


647

मैं उम्मीद कर रहा हूँ कि कोई व्यक्ति प्रत्येक के लिए सर्वोत्तम उपयोग के मामलों के कुछ ठोस उदाहरण प्रदान कर सकता है।

यदि आप किसी वेब सेवा के साथ संचार कर रहे हैं तो रेट्रोफिट का उपयोग करें। यदि आप चित्र डाउनलोड कर रहे हैं तो सहकर्मी लाइब्रेरी पिकासो का उपयोग करें। यदि आपको रेट्रोफ़िट / पिकासो के बाहर झूठ बोलने वाले HTTP ऑपरेशन करने की आवश्यकता है तो ओएचटीटीपी का उपयोग करें।

वॉली ने लगभग रेट्रोफिट + पिकासो के साथ प्रतिस्पर्धा की। प्लस साइड पर, यह एक पुस्तकालय है। माइनस साइड पर, यह एक अनिर्दिष्ट है, एक असमर्थित, "दीवार पर कोड को फेंक दें और उस पर I | O प्रस्तुति दें" लाइब्रेरी।

EDIT - वॉली अब आधिकारिक तौर पर Google द्वारा समर्थित है। कृपया Google डेवलपर गाइड देखें

मैंने जो पढ़ा है, उससे लगता है कि ओकेएचटीटीपी 3 में से सबसे मजबूत है

यदि उपलब्ध हो तो रेट्रोफ़िट स्वचालित रूप से OkHTTP का उपयोग करता है। जेक व्हार्टन से एक Gist है जो वॉली को OkHTTP से जोड़ता है।

और इस परियोजना की आवश्यकताओं (ऊपर उल्लिखित) को संभाल सकता है।

संभवतः "ऑडियो और वीडियो की स्ट्रीमिंग डाउनलोड", "स्ट्रीमिंग" की पारंपरिक परिभाषा द्वारा आप उनमें से किसी का उपयोग नहीं करेंगे। इसके बजाय, एंड्रॉइड का मीडिया ढांचा आपके लिए उन HTTP अनुरोधों को संभाल लेगा।

कहा जा रहा है, यदि आप अपने स्वयं के HTTP- आधारित स्ट्रीमिंग करने का प्रयास करने जा रहे हैं, तो ओकेएचटीपी को उस परिदृश्य को संभालना चाहिए; मुझे याद नहीं है कि वॉली उस परिदृश्य को कितनी अच्छी तरह से संभालेंगे। उसके लिए न तो रेट्रोफिट और न ही पिकासो को डिजाइन किया गया है।


4
संक्षिप्त उत्तर के लिए @CommonsWare धन्यवाद, और वॉली के अनिर्दिष्ट स्टिज़ पर नोट (अन्य परियोजनाओं की तुलना में उस छाप को, जासूसी मिला)। निश्चित रूप से मुझे मैदान से बाहर निकलने में मदद मिलती है।
अल्फी हंससेन

18
@CommonsWare से एक और शानदार जवाब। क्या कोई इस बात का अनुसरण कर सकता है कि रोबोस्पाइस इस सब में कैसे फिट बैठता है?
user1923613

3
@ user1923613 github.com/octo-online/robospice यदि आप नेटवर्क कॉल के लिए वॉली का उपयोग कर रहे हैं, तो रोबोस्पाइस का उपयोग करने की कोई आवश्यकता नहीं है! वॉली कई चीजें जो नेटवर्क कॉल के लिए करते हैं, रोबोस्पाइस बॉक्स से बाहर REST का समर्थन करता है (उपयोग करके) स्प्रिंग एंड्रॉइड या Google Http क्लाइंट या रेट्रोफ़िट)। यदि आप तेज़ नेटवर्क चाहते हैं और मजबूत नेटवर्क क्लाइंट के साथ इमेजलीडिंग कर रहे हैं तो आप वॉली में जा सकते हैं! लेकिन आप बेहतर प्रदर्शन के लिए रोबोस्पाइस का उपयोग करने और मेमोरी लीक से बचने के लिए सामान्य एंड्रॉइड async कार्य का स्थान ले सकते हैं!
LOG_TAG

4
@frostymarvelous: मुझे लगता है कि अनिर्दिष्ट और असमर्थित पर्याप्त औचित्य से अधिक है। यह ऐसा नहीं है कि Google में इस तरह की औपचारिक रूप से सामग्री को संभालने के लिए एक प्रणाली का अभाव है (उदाहरण के लिए, एंड्रॉइड सपोर्ट लाइब्रेरी)। इस उत्तर के बाद से दो वर्षों में, प्लस साइड पर, समुदाय की सहायता का कुछ हिस्सा है, जिसमें कोड की कुछ अनौपचारिक पैकेजिंग एक विरूपण साक्ष्य में शामिल है।
कॉमंसवेयर

4
@AbhinavVutukuri: आप दो साल पहले के एक जवाब पर टिप्पणी कर रहे हैं। उस समय, कोई प्रलेखन नहीं था।
कॉमन्सवेयर

361

वॉली के परिप्रेक्ष्य को देखते हुए आपकी आवश्यकता के लिए कुछ फायदे हैं:

वॉली, एक तरफ, पूरी तरह से व्यक्तिगत, छोटे HTTP अनुरोधों को संभालने पर केंद्रित है। इसलिए अगर आपके HTTP रिक्वेस्ट हैंडलिंग में कुछ विचित्रताएं हैं, तो वॉली शायद आपके लिए एक हुक है। यदि, दूसरी ओर, आपके पास अपनी छवि हैंडलिंग में एक क्विक है, तो आपके पास एकमात्र वास्तविक हुक ImageCache है । "यह कुछ भी नहीं है, लेकिन यह बहुत कुछ नहीं है! या तो"। लेकिन इसके और भी कई फायदे हैं जैसे कि एक बार जब आप अपने अनुरोधों को परिभाषित करते हैं, तो उन्हें एक खंड या गतिविधि के भीतर से उपयोग करना समानांतर एस्कॉट्स के विपरीत दर्द रहित होता है।

वॉली के पेशेवरों और विपक्ष:

तो वॉली के बारे में क्या अच्छा है?

  • नेटवर्किंग हिस्सा सिर्फ छवियों के लिए नहीं है। वॉली को आपके बैक एंड का एक अभिन्न अंग माना जाता है। एक साधारण REST सेवा से दूर एक ताजा परियोजना के लिए, यह एक बड़ी जीत हो सकती है।

  • NetworkImageView पिकासो की तुलना में अनुरोध सफाई के बारे में अधिक आक्रामक है, और इसके जीसी उपयोग पैटर्न में अधिक रूढ़िवादी है। NetworkImageView विशेष रूप से मजबूत मेमोरी संदर्भों पर निर्भर करता है, और ImageView के लिए एक नया अनुरोध या जैसे ही ImageView स्थानांतरित होता है, वैसे ही सभी अनुरोध डेटा को साफ कर देता है।

  • प्रदर्शन। यह पोस्ट इस दावे का मूल्यांकन नहीं करेगी, लेकिन उन्होंने स्पष्ट रूप से अपने मेमोरी उपयोग पैटर्न में विवेकपूर्ण होने के लिए कुछ ध्यान रखा है। वॉली भी संदर्भ स्विचिंग को कम करने के लिए मुख्य थ्रेड को कॉलबैक करने का प्रयास करता है।

  • जाहिर तौर पर वॉली के पास वायदा भी है। यदि आप रुचि रखते हैं तो RequestFuture की जाँच करें।

  • यदि आप उच्च-रिज़ॉल्यूशन संपीड़ित चित्रों के साथ काम कर रहे हैं, तो यहां वॉली एकमात्र समाधान है जो अच्छी तरह से काम करता है।

  • वॉली को ओक्त्रप के साथ इस्तेमाल किया जा सकता है (ओकेर्टप का नया संस्करण बेहतर प्रदर्शन के लिए एनआईओ का समर्थन करता है)

  • गतिविधि जीवन चक्र के साथ वॉली अच्छा खेलता है।

वॉली के साथ समस्याएं:
चूंकि वॉली नई है, इसलिए अभी कुछ चीजें समर्थित नहीं हैं, लेकिन यह तय है।

  1. मल्टीपार्ट अनुरोध (समाधान: https://github.com/vinaysshenoy/enhanced-volley )

  2. स्थिति कोड 201 को एक त्रुटि के रूप में लिया जाता है, 200 से 207 तक स्थिति कोड अब सफल प्रतिक्रियाएं हैं। (फिक्स्ड: https://github.com/Vinayrraj/CustomVolley )

    अद्यतन: Google वॉली की नवीनतम रिलीज़ में, 2XX स्थिति कोड बग अब ठीक हो गया है! फिकस किर्कपैट्रिक के लिए धन्यवाद!

  3. यह कम प्रलेखित है, लेकिन बहुत से लोग गीथूब में वॉली का समर्थन कर रहे हैं, जावा जैसे प्रलेखन यहां पाए जा सकते हैं । Android डेवलपर वेबसाइट पर, आपको वॉली के माध्यम से नेटवर्क डेटा ट्रांसमिट करने के लिए गाइड मिल सकता है । और वॉली सोर्स कोड Google Git पर पाया जा सकता है

  4. वॉली फ्रेमवर्क के रीडायरेक्ट पॉलिसी को हल करने / बदलने के लिए ओकेएचटीपी के साथ वॉली का उपयोग करें (ऊपर उल्लिखित कॉमन्सवेयर)

इसके अलावा आप पिकासो के साथ इस कम्पेयरिंग वॉली की इमेज लोडिंग को पढ़ सकते हैं

पुनः स्थापित:

यह स्क्वायर द्वारा जारी किया गया है , यह REST API's (अपडेट: Voila! NIO सपोर्ट के साथ) का उपयोग करने के लिए बहुत आसान है।

रेट्रोफिट के पेशेवरों:

  • वॉली की तुलना में, रेट्रोफिट का REST एपीआई कोड संक्षिप्त है और उत्कृष्ट एपीआई प्रलेखन प्रदान करता है और समुदायों में इसका अच्छा समर्थन है! परियोजनाओं में जोड़ना बहुत आसान है।

  • हम किसी भी क्रमांकन पुस्तकालय के साथ त्रुटि से निपटने के साथ इसका उपयोग कर सकते हैं।

अपडेट: - रेट्रोफिट 2.0.0-बीटा 2 में बहुत अच्छे बदलाव हुए हैं

  • OkHttp 2.0 के साथ रेट्रोफिट का संस्करण 1.6 अब java.io और java.nio को सपोर्ट करने के लिए Okio पर निर्भर है जो CPU और मेमोरी को बचाने के लिए कुछ चतुर चीजों को करने के लिए ByteString और Buffer का उपयोग करके आपके डेटा को एक्सेस, स्टोर और प्रोसेस करना बहुत आसान बनाता है । (FYI करें: यह मुझे NIO के समर्थन के साथ Koush की OIN लाइब्रेरी की याद दिलाता है !) हम RxJava के साथ मिलकर Retrofit का उपयोग कर सकते हैं और संयोजन के लिए REST कॉल का उपयोग कर rxObservables का उपयोग करके बदसूरत कॉलबैक श्रृंखला (कॉलबैक नरक से बचने के लिए !!) कर सकते हैं

संस्करण 1.6 के लिए रेट्रोफिट का विपक्ष:

  • मेमोरी संबंधी त्रुटि से निपटने की कार्यक्षमता अच्छी नहीं है (पुराने संस्करणों में रेट्रोफिट / ओकेहटप के) यह सुनिश्चित नहीं है कि यह जावा एनआईओ समर्थन के साथ ओकिओ के साथ बेहतर है।

  • यदि हम इसे अनुचित तरीके से उपयोग करते हैं तो न्यूनतम थ्रेडिंग सहायता नर्क को वापस बुला सकती है।

(उपरोक्त सभी विपक्षों को रेट्रोफिट 2.0 बीटा के नए संस्करण में हल किया गया है)

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

अपडेट करें:

Android Async बनाम वॉली बनाम रेट्रोफिट प्रदर्शन बेंचमार्क (मिलीसेकंड, कम मूल्य बेहतर है):

Android Async बनाम वॉली बनाम रेट्रोफिट प्रदर्शन बेंचमार्क

(रेट्रोफिट बेंचमार्क जानकारी के ऊपर FYI करें जावा NIO सपोर्ट के साथ बेहतर होगा क्योंकि OKhttp का नया संस्करण NIO Okio लाइब्रेरी पर निर्भर है)

अलग-अलग दोहराव (1 - 25 बार) के साथ सभी तीन परीक्षणों में, वॉली कहीं भी 50% से 75% तेज था। समान समय की समान संख्या को पूरा करते हुए, AsyncTasks की तुलना में रेट्रोफ़िट 50% से 90% तक प्रभावशाली रूप से देखा गया। डैशबोर्ड टेस्ट सूट में, यह डेटा को कई सेकंड तेजी से लोड / पार्स करने में अनुवादित होता है। यह एक बड़े पैमाने पर वास्तविक दुनिया अंतर है। परीक्षणों को निष्पक्ष बनाने के लिए, AsyncTasks / Volley के लिए समय में JSON को पार्स करना शामिल था क्योंकि रेट्रोफ़िट यह स्वचालित रूप से आपके लिए करता है।

बेंचमार्क टेस्ट में जीत हासिल की!

अंत में, हमने अपने आवेदन के लिए रेट्रोफिट के साथ जाने का फैसला किया। न केवल यह हास्यास्पद रूप से तेज़ है, बल्कि यह हमारे मौजूदा आर्किटेक्चर के साथ काफी मेल खाता है। हम एक माता-पिता कॉलबैक इंटरफ़ेस बनाने में सक्षम थे जो स्वचालित रूप से अपने एपीआई के लिए कोई प्रयास नहीं करने के साथ त्रुटि से निपटने, कैशिंग, और पृष्ठांकन करता है। रेट्रोफिट में विलय करने के लिए, हमें अपने मॉडल GSON के अनुरूप बनाने के लिए अपने चरों का नाम बदलना पड़ा, कुछ सरल इंटरफेस लिखना, पुराने API से फ़ंक्शंस हटाना, और AsyncTasks का उपयोग न करने के लिए हमारे टुकड़े संशोधित करना। अब जब हमारे पास कुछ टुकड़े पूरी तरह से परिवर्तित हो गए हैं, तो यह बहुत दर्दनाक है। कुछ बढ़ते दर्द और मुद्दे थे जिन्हें हमें दूर करना था, लेकिन कुल मिलाकर यह आसानी से हो गया। शुरुआत में, हम कुछ तकनीकी मुद्दों / बगों में भाग गए, लेकिन स्क्वायर में एक शानदार Google+ समुदाय है जो इसके माध्यम से हमारी मदद करने में सक्षम था।

वॉली का उपयोग कब करें ?!

हम वॉली का उपयोग तब कर सकते हैं जब हमें छवियों को लोड करने की आवश्यकता होती है और साथ ही REST API का उपभोग करना पड़ता है!, एक ही समय में कई n / w अनुरोध के लिए नेटवर्क कॉल कतार प्रणाली की आवश्यकता होती है! यह भी कि वॉर्ल में रेट्रोफिट की तुलना में बेहतर मेमोरी संबंधित त्रुटि है!

OkHttp का उपयोग वॉली के साथ किया जा सकता है, रेट्रोफिट डिफ़ॉल्ट रूप से OkHttp का उपयोग करता है ! इसमें SPDY सपोर्ट, कनेक्शन पूलिंग, डिस्क कैशिंग, ट्रांसपेरेंट कम्प्रेशन है! हाल ही में, इसे ओकिओ लाइब्रेरी के साथ जावा एनआईओ का कुछ समर्थन मिला है ।

स्रोत, क्रेडिट: श्री जोश Ruesch द्वारा वॉली-बनाम-रेट्रोफिट

नोट: स्ट्रीमिंग के बारे में यह निर्भर करता है कि आप RTSP / RTCP की तरह किस प्रकार की स्ट्रीमिंग चाहते हैं।


जानकारी के लिए @ Jan1337z +1! मैंने इसे अपडेट किया है! android.googlesource.com/platform/frameworks/volley
LOG_TAG

4
@LOG_TAG अपने नमूने में रोबोस्पाइस को बेंचमार्क करना दिलचस्प होगा। हम भी एक रेट्रोफिट मॉड्यूल की पेशकश करते हैं तो मेरा मानना ​​है कि इसके लिए बहुत कम परिवर्तनों की आवश्यकता होगी। क्या स्रोत कहीं उपलब्ध है? RS का लाभ यह है कि नेटवर्क अनुरोधों को निष्पादित करने वाली गतिविधि के जीवन चक्र को ठीक से संभालता है, और हम पारदर्शी कैशिंग भी प्रदान करते हैं, मुझे लगता है कि ओवरहेड एक शुद्ध रेट्रोफिट अनुरोध की तुलना में छोटा होगा।
Snicolas

@ Snicolas I यह जोश Ruesch ब्लॉग द्वारा आपको बेंचमार्क परिणाम मिला है आप फ़िकस किर्कपैट्रिक (वॉली संस्थापक), जोश Ruesch के बीच रूपांतरण देख सकते हैं! उन्होंने अभी तक बेंचमार्क टेस्ट प्रोजेक्ट को कहीं भी साझा नहीं किया है! FYI करें मैं अभी अपने रोबोस्पाइस को सीखने की शुरुआत कर रहा हूं जिसमें रेट्रोफिट सैंपल इस नोटिफिकेशन मुद्दे का सामना कर रहा है :)
LOG_TAG

3
नमस्ते! वॉली के साथ मल्टीपार्ट अनुरोधों के बारे में, मुझे लगता है कि हम इसके साथ पुस्तकालय MultipartEntityBuilderमें उपयोग कर सकते हैं httpmime
बीएनके

2
क्या किसी और ने इन बेंचमार्क को सत्यापित किया है? चूंकि अपाचे http लाइब्रेरी एम में पदावनत है (और मैं इसे मल्टीपार्ट बिल्डर के लिए इस्तेमाल कर रहा था), मैंने अपने नेटवर्किंग कोड को रिट्रोफिट पर माइग्रेट करने का निर्णय लिया। मैंने शुरू में सर्वर से वस्तुओं का एक गुच्छा प्राप्त करने के लिए GET कॉल में से एक को बदल दिया। मैं रेट्रोफिट बनाम AsyncTask (अपने खुद के JSON पार्सिंग के साथ) को समयबद्ध करता हूं। प्रदर्शन बहुत करीब था, न कि 3x सुधार के रूप में तालिका के "एक चर्चा" कॉलम में दिखाया गया है। दी गई, परिणामी कोड बहुत अधिक क्लीनर है और मुझे अपना खुद का JSON पार्सर लिखना नहीं था, लेकिन एक एकल GET अनुरोध के लिए इसमें सुधार किया गया था।
गैरी किपनीस

44

रोबोस्पाइस बनाम। फ़ायर

Https://groups.google.com/forum/# .topic / robospice /QwVCfY_glOQ से

  • रोबोस्पाइस (आरएस) वॉली की तुलना में सेवा आधारित और एंड्रॉइड दर्शन का अधिक सम्मान है। वॉली थ्रेड आधारित है और यह एंड्रॉइड पर पृष्ठभूमि प्रसंस्करण नहीं होना चाहिए। अंत में, आप दोनों लिबास खोद सकते हैं और पा सकते हैं कि वे काफी समान हैं, लेकिन बैकग्राउंड प्रोसेसिंग करने का हमारा तरीका अधिक एंड्रॉइड ओरिएंटेड है, यह हमें, उदाहरण के लिए, उपयोगकर्ताओं को यह बताने की अनुमति देता है कि आरएस वास्तव में पृष्ठभूमि में कुछ कर रहा है, जो होगा वॉली के लिए कठिन (वास्तव में यह बिल्कुल नहीं है)।
  • रोबोस्पाइस और वॉली दोनों ही प्राथमिकता, रिट्री पॉलिसी, अनुरोध रद्द करने जैसी अच्छी सुविधाएँ प्रदान करते हैं। लेकिन आरएस अधिक प्रदान करता है: एक अधिक उन्नत कैशिंग और यह एक बड़ा है, कैश प्रबंधन के साथ, एकत्रीकरण का अनुरोध, अधिक सुविधाएँ जैसे लंबित अनुरोध की प्रतिकृति, सर्वर हेडर पर भरोसा किए बिना कैश एक्सपायरी से निपटना, आदि।
  • रोबोस्पाइस यूआई थ्रेड के बाहर अधिक करता है: वॉली आपके पीओजेओ को मुख्य थ्रेड पर डिसेर्बलाइज करेगा, जो मेरे दिमाग के लिए भयानक है। रुपये के साथ आपका ऐप अधिक उत्तरदायी होगा।
  • गति के संदर्भ में, हमें निश्चित रूप से मैट्रिक्स की आवश्यकता है। RS ने अब सुपर फास्ट प्राप्त कर लिया है, लेकिन अभी भी हमारे पास यहां लगाने के लिए आंकड़ा नहीं है। वॉली को सैद्धांतिक रूप से थोड़ा तेज होना चाहिए, लेकिन आरएस अब बड़े पैमाने पर समानांतर है ... कौन जानता है?
  • रोबोस्पाइस एक्सटेंशन के साथ एक बड़ी संगतता रेंज प्रदान करता है। आप इसे okhttp, retrofit, ormlite (beta), jackson, jackson2, gson, xml serializer, google http क्लाइंट, स्प्रिंग एंड्रॉइड ... के साथ उपयोग कर सकते हैं ... काफी। वॉली को ओके http के साथ इस्तेमाल किया जा सकता है और गेसन का उपयोग किया जाता है। बस।
  • वॉली अधिक UI चीनी प्रदान करता है जो आर.एस. वॉली NetworkImageView प्रदान करता है, RS एक स्पाइसेलिस्ट एडाप्टर प्रदान करता है। सुविधा के संदर्भ में यह अब तक नहीं है, लेकिन मेरा मानना ​​है कि इस विषय पर वॉली अधिक उन्नत हैं।
  • इसकी प्रारंभिक रिलीज के बाद से रोबोस्पाइस में 200 से अधिक बग हल किए गए हैं। यह बहुत मजबूत है और उत्पादन में भारी उपयोग किया जाता है। वॉली कम परिपक्व है लेकिन इसका उपयोगकर्ता आधार तेजी से बढ़ रहा है (Google प्रभाव)।
  • रोबोस्पाइस मावेन सेंट्रल पर उपलब्ध है। वॉली को ढूंढना मुश्किल है;)

Robospice REST कॉल के लिए android सेवाओं का उपयोग करता है, हम Robospice का उपयोग Retrofit के साथ कर सकते हैं ताकि gson के पार्सिंग प्रयासों को कम किया जा सके, उसी तरह हम Robospice के साथ Volley (चलने पर आधारित) का उपयोग कर सकते हैं? (यह सुनिश्चित करने के लिए कि यह सही qsn नहीं है) मैं सिर्फ सेवा के साथ वॉली खोज रहा हूँ!
LOG_TAG

1
सेवा के साथ वॉली मूल रूप से आरएस है। या, कालानुक्रमिक रूप से, वॉली बिना सेवा के आरएस है और कुछ अन्य सुविधाएँ गायब हैं। और हाँ, आप RS के साथ Retrofit का उपयोग कर सकते हैं, और यदि आप चाहें तो okhttp भी जोड़ सकते हैं।
स्निकोलस

7
वॉली को ढूंढना कठिन क्यों है? compile 'com.mcxiaoke.volley:library:1.0.+'
रोब

1
@Rob एक समय था जब mcxiaoke का क्लोन उपलब्ध नहीं था। आपको अपने ऐप में मैन्युअल रूप से वॉली को शामिल करना था।
ठंढाकार

"वॉली मुख्य सूत्र पर आपके पीओजेओ का वर्णन करेंगे"। आप लौटा JSON डेटा प्राप्त कर सकते हैं और इसे एक अलग थ्रेड पर अपने आप को डिसअर्सलाइज़ कर सकते हैं यदि यह एक समस्या है।
AndroidDev

20

Android के लिए AFNetworking:

फास्ट एंड्रॉयड नेटवर्किंग है यहां

Fast Android Networking Library हर तरह के HTTP / HTTPS अनुरोध का समर्थन करता है, जैसे GET, POST, DELETE, HEAD, PUT, PATCH

फास्ट एंड्रॉइड नेटवर्किंग लाइब्रेरी किसी भी प्रकार की फ़ाइल डाउनलोड करने का समर्थन करती है

Fast Android Networking Library किसी भी प्रकार की फ़ाइल अपलोड करने का समर्थन करता है (मल्टीपार्ट अपलोड का समर्थन करता है)

फास्ट एंड्रॉइड नेटवर्किंग लाइब्रेरी एक अनुरोध को रद्द करने का समर्थन करता है

फास्ट एंड्रॉइड नेटवर्किंग लाइब्रेरी किसी भी अनुरोध (LOW, MEDIUM, HIGH, IMMEDIATE) को प्राथमिकता देने का समर्थन करती है

फास्ट एंड्रॉइड नेटवर्किंग लाइब्रेरी RxJava का समर्थन करती है

चूंकि यह नेटवर्किंग परत के रूप में OkHttp का उपयोग करता है, यह समर्थन करता है:

फास्ट एंड्रॉइड नेटवर्किंग लाइब्रेरी HTTP / 2 समर्थन का समर्थन करती है जो एक ही होस्ट को सॉकेट साझा करने के लिए सभी अनुरोधों की अनुमति देती है

Fast Android Networking Library कनेक्शन पूलिंग का उपयोग करता है जो अनुरोध विलंबता को कम करता है (यदि HTTP / 2 उपलब्ध नहीं है)

पारदर्शी GZIP सिकुड़ता डाउनलोड आकार

फास्ट एंड्रॉइड नेटवर्किंग लाइब्रेरी प्रतिक्रिया कैशिंग का समर्थन करती है जो नेटवर्क को पूरी तरह से दोहराने के अनुरोध से बचाती है

धन्यवाद: पुस्तकालय मेरे द्वारा बनाया गया है


1
आप कहते हैं कि आपकी लाइब्रेरी HTTP / 2 का समर्थन करती है, लेकिन आप यह नहीं कहते कि HTTP / 2 समर्थन के लिए API की आवश्यकता है या नहीं। मेरी समझ यह थी कि 5.0 से कम Android API स्तर में HTTP / 2 का समर्थन करने के लिए सही SSL एन्क्रिप्शन विधि नहीं थी। दस्तक नहीं, बस अपने प्रस्तावित समाधान का पूरी तरह से मूल्यांकन करने की कोशिश कर रहा है।
डॉक्टर्ड सेप

@AmitShekhar: मैं बस यह जानना चाहता था कि एंड्रॉइड में एपीआई कॉलिंग के लिए कौन सा सबसे अच्छा है। मैं एंड्रॉइड नेटवर्किंग लाइब्रेरी का उपयोग कर रहा हूं, इसलिए जो रेट्रोफिट, वॉली या एंड्रॉइड नेटवर्किंग को लागू करने के लिए बहुत अच्छा है?
पार्थ भ्यानी

@Amit Shekhar मल्टीआर्ट इमेज अपलोड के लिए फास्ट एंड्रॉइड नेटवर्किंग कितना कुशल है, खासकर जब यह कम इंटरनेट परिदृश्यों के लिए आता है?
user3135923 8

18

Async HTTP क्लाइंट लूपज बनाम वॉली

मेरी परियोजना की बारीकियाँ हर 1-5 मिनट में छोटे HTTP अनुरोध हैं।

मैं एक लंबे समय के लिए async HTTP क्लाइंट (1.4.1) का उपयोग कर रहा हूं। प्रदर्शन वेनिला अपाचे httpClient या HTTP URL कनेक्शन का उपयोग करने से बेहतर है। वैसे भी, लाइब्रेरी का नया संस्करण मेरे लिए काम नहीं कर रहा है: पुस्तकालय इंटर कॉलबैक की अतिरिक्त कटौती श्रृंखला।

सभी उत्तरों को पढ़कर मुझे कुछ नया करने की कोशिश करने के लिए प्रेरित किया। मैंने वॉली HTTP पुस्तकालय को चुना है।

कुछ समय के लिए उपयोग करने के बाद, यहां तक ​​कि परीक्षणों के बिना, मैं स्पष्ट रूप से देखता हूं कि प्रतिक्रिया समय 1.5x, 2x वॉली तक नीचे है।

हो सकता है कि Retrofit एक async HTTP क्लाइंट से बेहतर हो? मुझे इसे आजमाने की जरूरत है। लेकिन मुझे यकीन है कि वॉली मेरे लिए नहीं है।


Retrofit Vs AsyncHttpClient के बारे में कोई विश्लेषण ??? कृपया पोस्ट करें यदि हाँ @Sergey
IshRoid


मैं कुछ वर्षों के लिए AsyncHttpClient का उपयोग कर रहा हूं। बुरा हिस्सा यह है कि गितुब रेपो एक कमिट के बिना 2 साल है।
विटोर ह्यूगो श्वाब

इसका वास्तविक नहीं है, async http बहुत पुराना फैशन है। किसी अन्य लाइब्रेरी में बदलने पर विचार करें। वॉली भी बहुत अच्छा विकल्प बन गया है।
सर्गेई वकुलेंको

सर्गेई, @IshRoid मैं अभी भी आपके प्रश्न के उत्तर की तलाश में हूँ, मैं AsyncHttpClient का उपयोग कर रहा हूँ, क्या मुझे RxJava Retrofit या किसी और चीज़ की तरह कुछ और उपयोग करना चाहिए..कृपया मुझे बताएं .. बेसब्री से इंतज़ार कर रहा हूँ
Deep Dave

11

वोली के साथ काम करने के अपने अनुभव से चर्चा को थोड़ा जोड़ने के लिए:

  1. वॉली किसी भी मायने में स्ट्रीमिंग अपलोड या डाउनलोड को हैंडल नहीं करता है। यही है, संपूर्ण अनुरोध निकाय को स्मृति में होना है और आप OutputStreamअनुरोधित निकाय को अंतर्निहित सॉकेट में लिखने के लिए उपयोग नहीं कर सकते हैं , और न ही InputStreamप्रतिक्रिया बॉडी को पढ़ने के लिए उपयोग कर सकते हैं , जैसा कि बुनियादी HttpURLConnectionकरता है। तो, वॉली बड़ी फ़ाइलों को अपलोड करने या डाउनलोड करने के लिए एक खराब विकल्प है। आपके अनुरोध और प्रतिक्रियाएं छोटी होनी चाहिए। यह वॉली की सबसे बड़ी सीमाओं में से एक है जिसे मैंने व्यक्तिगत रूप से सामना किया है। इसके लायक क्या है, OkHttp में स्ट्रीम के साथ काम करने के लिए इंटरफेस है।

  2. आधिकारिक दस्तावेज़ीकरण की कमी कष्टप्रद है, हालांकि मैं स्रोत कोड को पढ़कर इसके चारों ओर काम करने में सक्षम रहा हूं, जिसका पालन करना बहुत आसान है। जो अधिक परेशान करने वाला है, वह यह है कि जहां तक ​​मैं बता सकता हूं, वॉली का कोई आधिकारिक रिलीज संस्करण नहीं है और कोई मावेन या ग्रैडल कलाकृति नहीं है, और इसलिए इसे एक निर्भरता के रूप में प्रबंधित करना, किसी भी पुस्तकालय की तुलना में सिरदर्द कहलाता है, जिसे स्क्वायर जारी किया गया है। । आप बस एक रेपो को क्लोन करते हैं, एक जार का निर्माण करते हैं, और आप अपने दम पर हैं। बग फिक्स की तलाश में? प्राप्त करें और आशा करें कि यह वहाँ है। आपको कुछ अन्य सामान भी मिल सकते हैं; यह प्रलेखित नहीं किया जाएगा। मेरी राय में, इसका प्रभावी रूप से मतलब है कि वॉली एक असमर्थित 3 पार्टी लाइब्रेरी है, भले ही कोड आधार यथोचित रूप से सक्रिय हो। कैवियट खाली करनेवाला।

  3. एक नोड के रूप में, कंटेंट-टाइप क्लास / रिक्वेस्ट टाइप (JsonObjectRequest, ImageRequest, इत्यादि) से जुड़ा हुआ है, अजीब तरह का है और कॉलिंग कोड के लचीलेपन को थोड़ा कम कर देता है, जैसा कि आप वॉली के मौजूदा रिक्वेस्ट टाइप पदानुक्रम से बंधे हैं। मैं किसी भी अन्य की तरह हेडर के रूप में कंटेंट-टाइप सेट करने की सरलता को पसंद करता हूं (इस तरह से वॉली के साथ ऐसा न करें; आप दो कंटेंट-टाइप हेडर के साथ समाप्त हो जाएंगे!)। हालांकि, यह सिर्फ मेरी निजी राय है, और इसके आसपास काम किया जा सकता है।

यह कहना नहीं है कि वॉली के पास कुछ उपयोगी विशेषताएं नहीं हैं। यह निश्चित रूप से करता है। आसानी से अनुकूलन योग्य नीतियों, पारदर्शी कैशिंग, एक रद्दीकरण एपीआई, और अनुरोध शेड्यूलिंग और समवर्ती कनेक्शन के लिए समर्थन महान विशेषताएं हैं। बस यह जान लें कि यह सभी HTTP उपयोग के मामलों के लिए अभिप्रेत नहीं है (देखें आइटम 1 से ऊपर), और यह कि आपके ऐप (आइटम 2) में वॉली को उत्पादन में उपयोग करने में कुछ सिरदर्द शामिल हैं।


पूर्ण मेमोरी लोडिंग है जो मैं धीरे-धीरे मुझे मार रहा हूं। भगवान का शुक्र है कि किसी और ने इसका उल्लेख किया।
TheSunny

पुस्तकालय आपके अनुरोध निकाय की एक रक्षात्मक प्रतिलिपि भी बना सकता है, इसलिए बड़े अनुरोधों के लिए मेमोरी की खपत दो बार हो सकती है जो आप उम्मीद कर सकते हैं।
जेफ

9

मैंने हाल ही में एक लीब नामक आयन पाया है जो तालिका में थोड़ा अतिरिक्त लाता है।

आयन में ImageView, JSON (GSON की मदद से), फ़ाइलों और बहुत ही आसान UI थ्रेडिंग समर्थन के साथ एकीकृत छवि डाउनलोड के लिए अंतर्निहित समर्थन है।

मैं इसे एक नई परियोजना पर उपयोग कर रहा हूं और अब तक परिणाम अच्छे रहे हैं। इसका उपयोग वॉली या रेट्रोफिट की तुलना में बहुत सरल है।


2
आयन बनाम रेट्रोफिट, आप किसकी सिफारिश करेंगे?
श्रीकांत करुमनघाट

रेट्रोफिट बेहतर है आयन
राजेश कोशी

4

स्वीकृत उत्तर में जोड़ते हुए और LOG_TAG ने क्या कहा .... वॉली के लिए अपने डेटा को एक बैकग्राउंड थ्रेड में पार्स करने के लिए आपको सबक्लास करना होगा Request<YourClassName>क्योंकि इस onResponseविधि को मुख्य थ्रेड पर कॉल किया जाता है और मुख्य थ्रेड पर पार्सिंग करने पर यूआई आपके प्रतिक्रिया के कारण पिछड़ सकता है। बड़ा है। यहां पढ़ें कि कैसे करना है।


1
सही ... वॉली मुख्य थ्रेड पर प्रतिक्रिया को पार्स करता है जो प्रतिक्रिया के समय बड़ा होने के कारण th ui को शिथिल कर देता है।
गोपाल सिंह सिरवी

3

रिट्रोफिट 1.9.0 बनाम रोबोस्पाइस

मैं अपने ऐप में दोनों का उपयोग कर रहा हूं।

जब भी मैं नेस्टेड JSON वर्ग को पार्स करता हूं, तो रोबोस्पाइस रेट्रोफिट से अधिक तेजी से काम करता है। क्योंकि स्पाइस मंगर आपके लिए सब कुछ करेगा। रेट्रोफिट में आपको GsonConverter बनाने और इसे डिसेर्लाइज़ करने की आवश्यकता है।

मैंने एक ही गतिविधि में दो टुकड़े बनाए और एक ही तरह के दो 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

2

और फिर भी एक और विकल्प: https://github.com/apptik/jus

  • यह वॉली की तरह मॉड्यूलर है, लेकिन अधिक विस्तारित और दस्तावेज़ीकरण में सुधार हो रहा है, विभिन्न HTTP स्टैक्स और कन्वर्टर्स को बॉक्स से बाहर का समर्थन कर रहा है
  • इसमें रेट्रोफ़िट जैसे सर्वर एपीआई इंटरफ़ेस मैपिंग उत्पन्न करने के लिए एक मॉड्यूल है
  • इसमें जावाआरएक्स सपोर्ट भी है

और कई अन्य उपयोगी विशेषताएं जैसे मार्कर, ट्रांसफार्मर, आदि।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.