android - AsyncTask और थ्रेड/Runnable के बीच अंतर




multithreading android-asynctask (4)

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

मेरे पास सवाल है कि कौन सी पहेली मुझे।

मुझे लगता है कि मैं एक और धागे में कुछ करना चाहता हूं, जैसे कि GPS / स्थान सामान लाना, जो कि SDK दस्तावेज़ों में अनुशंसित है, पृष्ठभूमि थ्रेड का उपयोग करना चाहिए।

तो यहाँ सवाल है: क्या अंतर है

  1. AsyncTask और के माध्यम से पृष्ठभूमि में एक Thread बनाना

  2. Thread thread1 = new Thread(new Runnable() बनाना Thread thread1 = new Thread(new Runnable() ... और run() ?


मुख्य अंतर:

  1. AsyncTask एक अतुल्यकालिक कार्य एक संगणना द्वारा परिभाषित किया गया है जो एक पृष्ठभूमि थ्रेड पर चलता है और जिसका परिणाम UI थ्रेड पर प्रकाशित होता है। यह सामान्य थ्रेड के साथ नहीं किया जा सकता है जब तक कि आप यूआई थ्रेड पर Handler उपयोग नहीं करते हैं और उचित सिंक्रनाइज़ेशन को लागू करके किसी वस्तु का संदेश या सीधे परिवर्तन पोस्ट करते हैं।

  2. थ्रेड प्रदर्शन के बारे में डेवलपर गाइड द्वारा अनुशंसित के रूप में,

    ध्यान में रखने के लिए कुछ महत्वपूर्ण प्रदर्शन पहलू हैं। सबसे पहले, डिफ़ॉल्ट रूप से, एक ऐप सभी AsyncTask ऑब्जेक्ट को एक ही थ्रेड में बनाता है। इसलिए, वे धारावाहिक फैशन पर अमल करते हैं, और मुख्य धागे के साथ-एक विशेष रूप से लंबे काम के पैकेट कतार को अवरुद्ध कर सकते हैं। इस कारण से, हम सुझाव देते हैं कि आप केवल 5 मिनट से कम अवधि के काम की वस्तुओं को संभालने के लिए AsyncTask का उपयोग करें

    लेकिन सामान्य Thread का उपयोग लंबे समय तक चलने वाले कार्यों के लिए किया जा सकता है।

सादा जावा थ्रेड HandlerThread विपरीत HandlerThread लिए बहुत उपयोगी नहीं है, जो कि एंड्रॉइड फ्रेमवर्क द्वारा प्रदान किया गया है।

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

अधिक विवरण जानने के लिए नीचे पोस्ट देखें:

हैंडलर बनाम AsyncTask बनाम थ्रेड


समर्थन पुस्तकालय में नए जॉब शेड्यूलर का उपयोग करने के लिए बेहतर है।


AsyncTask एक नए थ्रेड पर कुछ काम करने के लिए एक सुविधा वर्ग है और परिणाम को उस थ्रेड पर उपयोग करते हैं जिससे इसे समाप्त होने पर (आमतौर पर UI थ्रेड) कहा जाता है। यह सिर्फ एक रैपर है जो एक दो रनवे का उपयोग करता है लेकिन थ्रेड बनाने और थ्रेड के बीच मैसेजिंग को संभालने की सभी जटिलताओं को संभालता है।

AsyncTask UI थ्रेड का उचित और आसान उपयोग सक्षम करता है। यह वर्ग पृष्ठभूमि संचालन करने और थ्रेड और / या हैंडलर में हेरफेर किए बिना UI थ्रेड पर परिणाम प्रकाशित करने की अनुमति देता है।

AsyncTask को थ्रेड और हैंडलर के आसपास एक सहायक वर्ग के रूप में डिज़ाइन किया गया है और यह जेनेरिक थ्रेडिंग फ्रेमवर्क का गठन नहीं करता है। AsyncTasks को छोटे संचालन (अधिकतम कुछ सेकंड) के लिए आदर्श रूप से उपयोग किया जाना चाहिए। यदि आपको लंबे समय तक थ्रेड चलाने की आवश्यकता है, तो यह अत्यधिक अनुशंसा की जाती है कि आप java.util.concurrentacacge द्वारा प्रदान किए गए विभिन्न API का उपयोग करें निष्पादक, थ्रेडपूल एक्ज़ीक्यूटर और FutureTask।

एक अतुल्यकालिक कार्य को एक संगणना द्वारा परिभाषित किया जाता है जो एक पृष्ठभूमि थ्रेड पर चलता है और जिसका परिणाम UI थ्रेड पर प्रकाशित होता है। एक अतुल्यकालिक कार्य को 3 सामान्य प्रकारों से परिभाषित किया जाता है, जिन्हें परम, प्रगति और परिणाम, और 4 चरण, onPreExecute, doInBackground, onProgressUpdate और onPostExecute कहा जाता है।

Runnable इंटरफ़ेस जावा थ्रेडिंग के मूल में है। Runnable इंटरफ़ेस को किसी भी वर्ग द्वारा लागू किया जाना चाहिए, जिनके इंस्टेंस को एक थ्रेड द्वारा निष्पादित किया जाना है।

इसके अलावा अगर मैं इस ब्लॉग से उद्धरण:

अगर आपको SIMPLE कोडिंग का उपयोग AsyncTask की आवश्यकता है और यदि आपको SPEED का उपयोग पारंपरिक जावा थ्रेड की आवश्यकता है।





android-threading