2010-06-16 15 views
6

मैं दिए गए लिंक पर एक बड़े डेटा फ़ाइल डाउनलोड करने के लिए, http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/Samples/Downloaderएक बड़ी फ़ाइल डाउनलोड करने के लिए, जो AsyncTask या थ्रेड का उपयोग करने के लिए एक बेहतर तरीका है?

यह बहुत अच्छा होना करने के लिए (मैं अभी तक यह परीक्षण नहीं किया) लगता है एक नमूना मिल गया है। लेकिन मैंने उपरोक्त नमूने के रूप में थ्रेड क्लास का उपयोग नहीं करते हुए, AsyncTask क्लास का उपयोग करके एक ही चीज़ करने के लिए स्टैक ओवरफ्लो पर कुछ पोस्ट पढ़ी हैं।

जो मैं जानना चाहता हूं, मुझे फ़ाइल डाउनलोड करने के लिए उपयोग करना चाहिए? और यदि AsyncTask बेहतर है, तो क्या आप मुझे नमूना कोड पर इंगित करेंगे?

उत्तर

7

अस्वीकरण: मैं एंड्रॉइड डेवलपर नहीं हूं, उत्तर सामान्य अनुभव से आता है।

थ्रेड क्लास लंबे समय से चलने वाली गतिविधियों के लिए सबसे उपयुक्त है, अतुल्यकालिक कार्यों के लिए नहीं। यदि आप श्रमिकों के पूल का प्रबंधन करते हैं, लेकिन फिर भी थ्रेड का जीवनकाल आवेदन के समान या लगभग समान है। विचार करें कि धागे का निर्माण महंगा संचालन है।

AsyncTasks और अन्य सहायक आमतौर पर कुछ ऐसी गतिविधियों के लिए होते हैं जिन्हें आप पृष्ठभूमि में करना चाहते हैं ताकि ऐप को अवरुद्ध न किया जा सके। वे आमतौर पर मंच द्वारा अच्छी तरह से प्रबंधित होते हैं और सस्ते होते हैं।

मेरी राय: यदि आप कभी-कभी पृष्ठों को लोड करना चाहते हैं तो AsyncTask का उपयोग करें। यदि आपका ऐप पृष्ठभूमि में हर समय पृष्ठों को लोड करेगा तो थ्रेड पर विचार करें।

+1

मैं एक उत्तर लिख रहा था, लेकिन यही वह है जो मैं लिखने वाला था। तो +1। – Cristian

+1

एक वास्तविक एंड्रॉइड डेवलपर के रूप में मैं केवल पूरी तरह से सही कह सकता हूं। एसिंक कार्य के साथ जाएं यदि आप केवल एक फ़ाइल डाउनलोड करते हैं और थ्रेड या सेवा के साथ यदि आप लगातार डाउनलोड और अपलोड कर रहे हैं ... अच्छा उत्तर एंड्रे – Janusz

+0

धन्यवाद सबको! मैं AsyncTask कक्षा का उपयोग करूंगा। –

0

डाउनलोड के दौरान इन दो विकल्पों में मारने की समान संभावना है (जब उपयोगकर्ता किसी अन्य ऐप पर स्विच करता है)। फिर भी, AsyncTask कम गड़बड़ है। बड़ी फ़ाइलों को डाउनलोड करने के लिए, Service का उपयोग करने पर विचार करें।

0

3.0 से पहले एंड्रॉइड संस्करणों में AsyncTasks कार्यों को निष्पादित करने के लिए पृष्ठभूमि में धागे के पूल का उपयोग करता है, लेकिन 3.0 के बाद के संस्करणों में, AsyncTasks को निष्पादित करने के लिए एक थ्रेड का उपयोग किया जाता है।

यदि आपको एक ही समय में बहुत से अनुरोध करने की आवश्यकता है और आपका एंड्रॉइड संस्करण 3.0 से अधिक है, तो थ्रेड के पूल का उपयोग करें, लेकिन अगर आपको केवल एक ही डाउनलोड करना है (एंड्रॉइड संस्करण को ध्यान में रखना नहीं है) AsyncTask का उपयोग करें, इसे बिना किसी समस्या के एक पृष्ठभूमि थ्रेड पर निष्पादित किया जाएगा, जो आपके द्वारा थ्रेड प्रबंधित करने से आसान है।

संबंधित मुद्दे

 संबंधित मुद्दे