11

मुझे AsyncTask एस की संख्या निष्पादित करने की आवश्यकता है और फिर अपने सभी परिणामों को इकट्ठा करने, समेकित करने और फिर मेरे उपयोगकर्ता को अंतिम परिणाम वापस करने की आवश्यकता है।Android AsyncTask के साथ निष्पादक सेवा का उपयोग कैसे करें?

मैं एंड्रॉइड में एकाधिक AsyncTask एस प्रबंधित करने का एक तरीका देख रहा हूं। मैं Java Concurrency पैकेज से ExecutorService का उपयोग करने के बारे में सोच रहा हूं लेकिन मैं अटक गया क्योंकि ExecutorService केवल रननेबल्स या कॉलबल्स लेता है। मेरी आवश्यकता स्थापित करने के लिए मैं

ExecutorService.invokeAll((Collection<? extends Callable<T>> tasks)

invokeAll() विधि का उपयोग एक सूची प्रदान करेगा List<Future><V>> के केवल जब सभी प्रस्तुत कार्यों के पूर्ण होते सकता है और मैं इसके लिए इसी Future से प्रत्येक कार्य के लिए मेरे परिणाम प्राप्त कर सकते हैं।

सभी ExecutorService के साथ अच्छी तरह से इस तथ्य की उम्मीद है कि यह AsyncTask स्वीकार नहीं करता है।

AsyncTask और ExecutorService का उपयोग करने का कोई अन्य तरीका है या यदि आप कृपया एक अलग दृष्टिकोण की सिफारिश कर सकते हैं।

+1

अच्छी बात यह है कि [AsyncTask] (http://developer.android.com/reference/android/os/AsyncTask.html) में विधि executeOnExecutor() है, बुरी बात यह है कि यह केवल एपीआई स्तर 11 – yorkw

+0

के बाद उपलब्ध है executeOnExecutor का उपयोग कैसे करें? इसके अलावा यह सुविधा हनीकॉम्ब (एपीआई लेवल 11) से उपलब्ध है लेकिन मेरे ऐप का मिनीएसडीके 4 है। – AKh

+1

यदि आप जोर देते हैं, तो मेरा जवाब देखें [यहां] (http://stackoverflow.com/questions/7211684/asynctask-executeonexecutor-before- एपीआई स्तरीय-11/9509184 # 9509184)। – yorkw

उत्तर

1

AsyncTask बनाएं और doInBackground() से अपने धागे शुरू करें। जब वे किया जाता है, डेटा इकट्ठा, समेकित, आदि डेटा और इसे वापस। फिर आप UI को अपडेट करने के लिए onPostExecute में इसका उपयोग कर सकते हैं। बहुत सारे धागे शुरू करने से स्मृति का उपभोग होगा, इसलिए आपको यह विचार करना चाहिए कि उन्हें वास्तव में समानांतर में चलाने की आवश्यकता है या नहीं।

+0

AsyncTask में इसके अंदर धागे का एक पूल है। क्या हम इस पूल का उपयोग कई कार्यों को चलाने के लिए कर सकते हैं बल्कि मुझे एक और बनाते हैं? – AKh

+1

सीधे नहीं। 'ExecuteOnExecutor()' के लिए, इस विधि का उद्देश्य कई 'AsyncTask' को एक साथ निष्पादित करना संभव है, क्योंकि आंतरिक एक समय में केवल एक ही AsyncTask निष्पादित कर सकता है (हनीकॉम और बाद में)। इसका मतलब यह है कि यदि आप एक ही समय में दो 'AsyncTask की शुरूआत करते हैं, तो दूसरा दूसरा शुरू होने से पहले खत्म होने की प्रतीक्षा करेगा। यदि आपको कुछ और जटिल करने की आवश्यकता है, तो आपको "AsyncTask' का उपयोग करने की ज़रूरत नहीं है, केवल सामान्य रूप से अपना थ्रेडिंग कोड और परिणाम प्राप्त होने पर UI को सूचित करने के लिए हैंडलर का उपयोग करें। –

+0

यह सच नहीं है कि "इसका अर्थ यह है कि यदि आप एक ही समय में दो AsyncTasks को कम या कम शुरू करते हैं, तो दूसरा" – Zou

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