2014-04-23 17 views
13

के साथ समांतर HTTP अनुरोध मेरे पास एक एंड्रॉइड एप्लिकेशन है जो वर्तमान में Volley लाइब्रेरी का उपयोग नेटवर्क अनुरोध करने और NetworkImageView के साथ डाउनलोड की गई छवियों को दिखाने के लिए कर रहा है।रेट्रोफिट

मैं Retrofit की क्षमताओं का परीक्षण करना चाहता हूं और चूंकि मुझे बहुत से अनुरोध (हजारों) चलाने की आवश्यकता है, मैं समानांतर निष्पादन के बारे में चिंतित हूं। VolleyRequestQueue के साथ समांतर अनुरोधों को संभालता है जो समवर्ती चल रहे अनुरोधों को चार तक सीमित करता है, जबकि अन्य अनुरोधों को निष्पादित करने के लिए प्रतीक्षा की जाती है। Retrofit दस्तावेज में मुझे समवर्ती अनुरोधों की संख्या को संभालने का कोई तरीका नहीं मिला है और मुझे संदेह है कि इस तरह के विवरण इस पुस्तकालय में डेवलपर को छोड़ दिए गए हैं।

क्या यह सही है? यदि हां, तो क्या कोई एंड्रॉइड उन्मुख कार्यान्वयन/पुस्तकालय उपलब्ध है? अन्यथा, समांतर अनुरोधों को संभालने के लिए सर्वोत्तम प्रथाएं क्या हैं?

उत्तर

36

रेट्रोफिट queuing अनुरोधों के लिए Executor का उपयोग करता है।

डिफ़ॉल्ट उपयोग Executors.newCachedThreadPool जो असीमित धागे के लिए अनुमति देता है। यह ज्यादातर उपयोग मामलों से फिट बैठता है क्योंकि आम तौर पर आपके पास कभी-कभी एक या दो अनुरोध होते हैं।

हालांकि, RestAdapter बनाने के दौरान आप अपना खुद का आपूर्ति करके इस व्यवहार को बदल सकते हैं। setExecutors पर कॉल करें और एक निष्पादक में पास करें जो सीमित थ्रेड पूल का उपयोग करता है (जो भी संख्या आप चाहते हैं) तक सीमित है। दूसरे तर्क के लिए, बस MainThreadExecutor का एक नया उदाहरण पास करें ताकि कॉलबैक मुख्य थ्रेड पर हो।

+0

क्या आप मेरे धागे को संभालने के लिए 'ThreadPoolExecutor' का उपयोग करने का सुझाव दे रहे हैं? यदि हां, तो मैं 'वॉली' में माइग्रेट करने से पहले इसका उपयोग कर रहा था, लेकिन मेरे पास दो मुख्य समस्याएं थीं: 1) मैं कुछ अनुरोध खो रहा था क्योंकि कतार पूरी थी, वॉली की एक असीमित कतार है। 2) कुछ अनुरोध कतार से हटा दिए गए थे क्योंकि वे बहुत लंबे समय तक इंतजार कर रहे थे। – Vektor88

+3

हां। एक असंबद्ध कतार का उपयोग करना 1 और 2 दोनों को हल करेगा। कुछ चुनने के लिए 'java.util.concurrent' में कुछ हैं। –

+0

संकेतों के लिए धन्यवाद, यह निश्चित रूप से काम कर रहा है। – Vektor88