मेरे पास एक ऐसा एप्लिकेशन है जो एक नए थ्रेड को जन्म देता है जब उपयोगकर्ता किसी छवि को फ़िल्टर करने के लिए कहता है।सरल थ्रेड प्रबंधन - जावा - एंड्रॉइड
यह एकमात्र प्रकार का कार्य है जो मेरे पास है और सभी समान महत्व के हैं।
यदि मैं बहुत अधिक समवर्ती धागे (मैक्स मैं कभी चाहता हूं 9) के लिए पूछता हूं तो थ्रेड मैनेजर अस्वीकृत एक्सेक्यूशन अपवाद फेंकता है।
मिनट में मैं क्या करता हूं;
// Manage Concurrent Tasks
private Queue<AsyncTask<Bitmap,Integer,Integer>> tasks = new LinkedList<AsyncTask<Bitmap,Integer,Integer>>();
@Override
public int remainingSize() {
return tasks.size();
}
@Override
public void addTask(AsyncTask<Bitmap, Integer, Integer> task) {
try{
task.execute(currentThumbnail);
while(!tasks.isEmpty()){
task = tasks.remove();
task.execute(currentThumbnail);
}
} catch (RejectedExecutionException r){
Log.i(TAG,"Caught RejectedExecutionException Exception - Adding task to Queue");
tasks.add(task);
}
}
बस एक कतार में अस्वीकार कर दिया कार्य जोड़ सकते हैं और अगली बार जब एक धागा कतार शुरू कर दिया है बैकलॉग हो, तो देखने के लिए जाँच की है।
इसके साथ स्पष्ट मुद्दा यह है कि यदि अंतिम कार्य अपने पहले प्रयास पर खारिज कर दिया जाता है तो इसे कभी भी पुनरारंभ नहीं किया जाएगा (जब तक इसकी आवश्यकता नहीं होती है)।
बस सोच रहा है कि एक साधारण मॉडल है, तो मुझे इस तरह की चीज़ों के प्रबंधन के लिए उपयोग करना चाहिए। कतार को सूचित करने के लिए मुझे कार्यों की आवश्यकता है, इसलिए मुझे पता है कि वहां जगह है लेकिन मुझे यकीन नहीं है कि कैसे। विषय पर कई उपयोगी लेख है, जो आप अपने कार्यान्वयन को निखारने में मदद कर सकते हैं करने के लिए विकिपीडिया लेख अंक -
सधन्यवाद,
गेविन
सीमा अब 10 नहीं है। सीमा को जगह में रखा गया था क्योंकि AsyncTasks दर्जनों द्वारा निकाला जाने वाला नहीं है। चूंकि इस तरह के कार्य का लक्ष्य यूआई को अपडेट करना है, इसलिए अपडेट के कारण दर्जनों धागे होने के लिए यह बहुत भयानक होगा। –
सीमा वर्तमान में 5google.com/codesearch#uX1GffpyOZk/core/java/android/os/AsyncTask.java –
@Grantland Chew के अनुसार 5 समांतर धागे है: नहीं, यह 5 प्रारंभ करने के लिए है। यह उससे आगे बढ़ सकता है। – CommonsWare