2015-04-29 10 views
22

execute() और executeOnExecuter() का उपयोग करने के बीच क्या अंतर है?AsyncTask निष्पादित() या executeOnExecutor()?

  • execute() डिफ़ॉल्ट रूप से कार्य निष्पादित करता है? (धारावाहिक या समानांतर में?)

  • नए एसडीके> 16 के लिए क्या उपयोग किया जाना चाहिए?

  • यह नहीं बल्कि धारावाहिक से कार्यों के लिए समानांतर निष्पादन (THREAD_POOL_EXECUTOR) का उपयोग करने के भले ही यह आवेदन के लिए कोई फर्क नहीं पड़ता एक अच्छा अभ्यास है या कि AsyncTask रों की संख्या कि निष्पादित किया जाएगा पर निर्भर करता है करता है?

+0

आइस क्रीम सैंडविच लक्ष्य के बाद AsyncTask के API में समान रूप से समानांतर निष्पादन अक्षम किया गया था। इसलिए यदि आप अभी भी अपने AsyncTasks में समानांतर निष्पादन चाहते हैं, तो आपको 'executeOnExecutor' का उपयोग करने की आवश्यकता है। –

उत्तर

26

डिफ़ॉल्ट रूप से कार्य निष्पादित करें (धारावाहिक या समांतर में) निष्पादित करता है।

एपीआई स्तर 11: समानांतर से पहले।

एपीआई स्तर 11 और ऊपर: धारावाहिक।

जो नए SDKs> 16 के लिए इस्तेमाल किया जाना चाहिए (executeOnExecuter?)

अपनी आवश्यकताओं पर निर्भर करता है। यदि आप डिफ़ॉल्ट निष्पादक से खुश हैं तो execute() का उपयोग करें। यदि आप नहीं हैं तो एक स्पष्ट निष्पादक का प्रयोग करें।

यह कार्यों के लिए समानांतर निष्पादन (THREAD_POOL_EXECUTOR) का उपयोग करने के बजाय धारावाहिक से भले ही यह आवेदन के लिए कोई फर्क नहीं पड़ता एक अच्छा अभ्यास है या करता है async कार्यों की संख्या कि निष्पादित किया जाएगा पर निर्भर करता है?

Async कार्यों को केवल सापेक्ष लघु बैकग्राउंड संचालन के लिए उपयोग किया जाना चाहिए।AsyncTask प्रलेखन का हवाला देते हुए:

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

जबकि async कार्य चल रहा है, निष्पादक थ्रेड अन्य कार्यों को निष्पादित नहीं कर सकता है। केवल एक निष्पादक थ्रेड के साथ एक धारावाहिक निष्पादक पर, जब आपके कार्य बहुत लंबे समय तक चलते हैं तो समस्याओं का पता लगाना आसान होता है। ऐसी समस्याओं का पता लगाने वाले समांतर निष्पादक पर अधिक एक साथ लंबे समय तक चलने वाले कार्य होते हैं।

इसलिए, यदि आपको वास्तव में समानांतर निष्पादक पर स्विच करने की आवश्यकता है, तो संभवतः आप अपने डिज़ाइन की समीक्षा करने से बेहतर हैं।

36

.execute() - इस समारोह कार्यक्रम एक एकल पृष्ठभूमि थ्रेड के लिए एक कतार पर कार्य। इसका मतलब है कि यदि आप दो asyncTasks को कॉल कर रहे हैं और उन्हें कॉल करने के लिए .execute() विधि का उपयोग कर रहे हैं, तो वे एक कतार में निष्पादित करेंगे (पहले तब दूसरा)।

.executeOnExecutor() - तुम दोनों asyncTasks के समानांतर निष्पादन चाहते हैं, आप asyncTask के निष्पादन के लिए इस विधि का उपयोग कर सकते हैं।

सरल शब्दों में: .execute() विधि asyncTasks के निष्पादन के लिए एक एकल धागा बनाता है, और .executeOnExecuter() विधि प्रत्येक ayncTask के लिए saprate थ्रेड बनाता है।

। निष्पादन क्रमशः सीरियल ऑर्डर में कार्यों को निष्पादित करता है।

संपादित: आप executeOnExecutor उपयोग करना चाहते हैं() आप इस कोड का उपयोग कर सकते हैं:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
else 
    task.execute(); 

पहले मधुकोश निष्पादित() विधि समानांतर में चलाने AsynkTask।