2012-03-14 17 views
6

मुख्य थ्रेड को रोकने के बिना एंड्रॉइड एप्लिकेशन में सभी चल रहे कार्यकर्ता धागे को कैसे रोकें?एंड्रॉइड एप्लिकेशन में सभी कार्यकर्ता धागे को कैसे रोकें

इसके लिए कोई उदाहरण?

+0

मुख्य धागे को रोकने के साथ आपका क्या मतलब है? कार्यकर्ता धागे के साथ आपका क्या मतलब है? – Blackbelt

+0

क्या आपने कुछ संबंधित खोज करने की कोशिश की है? StackOverflow में एक अच्छा खोज उपकरण है।आपका प्रश्न समझना आसान नहीं है, कृपया समझाएं। –

उत्तर

1

इस पोस्ट धागे के बारे में एक टन में बात करती है, कृपया इसे पढ़ें और repost कि यदि आपका प्रश्न

Stopping/Destroying a Thread

1

जावा में उत्तर न मिले, न धागा बंद करने के लिए विधि की आपूर्ति।

आप कर सकते हैं केवल interrupt धागा है, लेकिन राज्य में धागा चाहिए जो, बीच में किया जा सकता है sleep, wait, आदि जैसे ...

या आप धागा फेंक अपवाद बनाने के लिए कुछ चाल का उपयोग कर सकते हैं , जैसे:

1. यदि थ्रेड नेटवर्क से कनेक्ट है, तो आप थ्रेड को रोकना चाहते हैं, आप नेटवर्क कनेक्शन बंद कर सकते हैं, आईओएक्सप्शन फेंक देंगे;

2. अगर थ्रेड फ़ाइल को पढ़ा जाता है, तो आप स्ट्रीम को ioexception फेंकने के लिए बंद कर सकते हैं;

3. अगर धागा डेटाबेस क्वेरी है, तो आप डेटाबेस

तो यह आपके धागा काम करने पर निर्भर बंद कर सकते हैं।

1

असल में थ्रेड में stop() विधि है, इसलिए आप सभी कार्यकर्ता धागे पर जा सकते हैं और इस विधि को प्रत्येक पर कॉल कर सकते हैं।

सवाल यह है कि "कार्यकर्ता धागे की सूची कहां प्राप्त करें?" बेहतर समाधान इस सूची को एप्लिकेशन स्तर पर कहीं भी स्टोर करना है, यानी जब भी आप कार्यकर्ता धागे बना रहे हैं तो इसे विशेष सूची में डाल दें। यह बेहतर समाधान है क्योंकि आप और केवल आप जानते हैं कि धागा "कार्यकर्ता" धागा है।

लेकिन सैद्धांतिक रूप से आप अपने आवेदन को गतिशील रूप से भी खोज सकते हैं और धागे को पुनर्प्राप्त कर सकते हैं। स्थैतिक विधि Thread.enumerate(Thread[] threads) है जो प्रदान की गई सरणी भरती है। लेकिन कैसे पता चलेगा कि कितने धागे चल रहे हैं? Thread.activeCount() का प्रयोग करें।

Thread[] threads = new Thread[Thread.activeCount()]; 
Thread.enumerate(threads); 
for (Thread t : threads) { 
    if (isWorkerThread(t)) { 
     t.stop(); 
    } 
} 

यह आपके कार्यकर्ता धागे की पहचान करने के लिए आप पर निर्भर है। उदाहरण के लिए आप इसके लिए थ्रेड के नाम या थ्रेड के स्टैक ट्रेस का उपयोग कर सकते हैं।

लेकिन यह बहिष्कृत विधि stop() पर कॉल करने का अपराध है। कारणों के बारे में पढ़ने के लिए कृपया इस विधि के जावाडोक देखें।

"दाएं" विधि अनुप्रयोग परत पर सुंदर शट डाउन तंत्र को लागू करना है। प्रत्येक थ्रेड को कुछ ध्वज की जांच करनी चाहिए जो कहती है कि थ्रेड बंद होना चाहिए और जब ध्वज सत्य है तो run() विधि से वापस आएं। इस मामले में अपने काम करने वाले धागे को बंद करना बहुत आसान है: केवल इस ध्वज का मूल्य सही पर सेट करें और धागे स्वयं को समाप्त कर देंगे। यह "सही" समाधान है।

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