2010-12-02 21 views
8

एंड्रॉइड में डाउनलोड कतार को लागू करने का सबसे अच्छा तरीका क्या है?एंड्रॉइड में कतार डाउनलोड करें

मुझे संदेह है कि कुछ प्लेटफ़ॉर्म कक्षाएं हो सकती हैं जो अधिकांश काम कर सकती हैं।

उत्तर

17

एंड्रॉइड में डाउनलोड कतार को लागू करने का सबसे अच्छा तरीका क्या है?

IntentService का उपयोग करें। यह आपके लिए कतार और पृष्ठभूमि धागा प्रदान करता है, इसलिए आपको बस अपना डाउनलोड तर्क onHandleIntent() में डालना है। See here for a sample project इसका प्रदर्शन।

+1

कमाल! धन्यवाद कॉमन्सवेयर! – hpique

+0

हैलो कॉमन्सवेयर, ऊपर मेटियन उदाहरण डाउनलोड कतार नहीं है। पृष्ठभूमि में इसकी बस डाउनलोड छवि। अगर मेरे पास 20 छवि डाउनलोड करने के लिए है तो क्या होगा? –

+1

@chish: "मेटियन उदाहरण से ऊपर एक डाउनलोड कतार नहीं है" - हाँ, यह है। मैं बस इसे एक बार आमंत्रित कर रहा हूं। "अगर मेरे पास 20 छवि डाउनलोड करने के लिए है?" - 'startService()' 20 बार कॉल करें, प्रत्येक को 'IntentService' के लिए आवश्यक जानकारी के साथ डाउनलोड करना है। जबकि एक कमांड प्रसंस्करण कर रहा है, अन्य लोग 'इंटेंट सेवा' के अंदर कतारबद्ध होंगे, उनकी बारी के लिए इंतजार कर रहे हैं। यदि आप कतार से काम कर रहे कई धागे के साथ एक डाउनलोड कतार बनाना चाहते हैं, तो अपनी खुद की 'सेवा' बनाएं जो 'थ्रेडपूल एक्स्सेलर' का उपयोग करती है और कतार खाली होने पर 'stopSelf()' को कॉल करती है। – CommonsWare

2

मैं java.util.concurrent पैकेज पर रखने का सुझाव देते हैं और अधिक विशेष रूप आप एक ExecutorService जो एक बार में केवल Runnable वस्तुओं की संख्या चल पाएंगे 'एन' बना सकते हैं Executors

पर पढ़ सकते हैं और स्वचालित रूप से कतार होगा बाकी कार्यों को ऊपर। एक बार धागे को निष्पादित करने के बाद निष्पादन समाप्त हो जाता है, यह निष्पादन के लिए कतार में अगली रननेबल ऑब्जेक्ट को उठाता है।

2

एक इंटेंट सेवा का उपयोग करना रद्द करने का समर्थन करना मुश्किल हो जाएगा। यह केवल कुछ है जिसे आपको अवगत होना चाहिए। यदि आप कर सकते हैं, तो यह एपीआई लेवल 9 है, तो आप http://developer.android.com/reference/android/app/DownloadManager.html

+0

डाउनलोड मैनेजर कतार में फ़ाइलों को डाउनलोड करता है? –

1

एपीआई 11 अप से, एक अच्छा दृष्टिकोण है फिक्स्ड थ्रेडपूल का उपयोग एसिंक कार्यों के साथ करना बेहतर होगा। एक बार करें:

ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

जहां 3 एक ही समय में डाउनलोड की जाने वाली डाउनलोड की संख्या है। यदि पहले से ही 3 डाउनलोड चल रहे हैं, और बाद में कार्य को स्वचालित रूप से संभाल लेंगे तो यह कार्य को कतारबद्ध करेगा। के साथ अपने async कार्य लॉन्च:

yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

पैरामीटर शायद यूआरएल आप कनेक्ट करना चाहते हैं। आप इसे अपने asynctask के onPostExecute में पढ़ सकते हैं, और HttpURLConnection का उपयोग कर सर्वर से कनेक्ट कर सकते हैं।

सुनिश्चित करें कि आप शटडाउन होने पर यह नीचे को कॉल करते हैं:

threadPoolExecutor.shutdown() 
संबंधित मुद्दे