2012-11-09 17 views
5

पर विशिष्ट थ्रेड मारता है, मैं एक विशिष्ट थ्रेड को मारना चाहता हूं लेकिन इसे काम करने का एक तरीका नहीं समझ सकता। मैं अगले सभी जानकारी शामिल करता हूं, भले ही यह महत्वपूर्ण न लगे:एंड्रॉइड एक्शन बार इवेंट

मैं एक्शन बार शेरलॉक का उपयोग करता हूं और एक एक्शन बटन ईवेंट पर थ्रेड मारना चाहता हूं। तो, मेरे पास है:

Thread myThread; 
    myThread = new Thread(new Runnable(){ 
     public void run(){ 
       functionX(); 
     } 
     }); 
    myThread.start(); 

यह धागा एक लंबा चलने वाला धागा है, और funcionX() कुछ नए धागे भी बनाता है। मैं जब धागा को मारने के लिए चाहता हूँ: प्रस्तुत (runnable) का उपयोग कर एक भविष्य परिणाम के लिए

public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()) { 

    case android.R.id.home: 
     myThread.interrupt(); 
     break; 
    }; 

मैं ExecutorService साथ की कोशिश की है, और Future.cancel लेकिन करता है काम करने के लिए लगता है नहीं। मुझे यह भी जिक्र करना चाहिए कि functionX() JSON सेवा से डेटा प्राप्त करने के लिए http प्राप्त अनुरोधों का उपयोग करता है।

उत्तर

4

वहाँ कई तरीके आप ऐसा कर सकते हैं, उनमें से जोड़े की तरह

    थ्रेड उपयोग TimerTask के बजाय
  1. हो सकता है और timeTask.cancel() कॉल कर सकते हैं -
  2. दखल की विधि रन() में के लिए थ्रेड, यह निर्धारित करने के लिए एक बूलियन वैल्यू जांचते रहें कि थ्रेड को समाप्त किया जाना चाहिए या फिर आप एक अपवाद
+0

+1। सुझाव 2 वह है जो मैं उपयोग करूंगा। यदि आप धागे को तेजी से लूप कर रहे हैं, तो बस इसे शीर्ष स्तर पर शामिल करें, अन्यथा कोड के माध्यम से कुछ हैं। भूख खंडों की प्रक्रिया से पहले। – Doomsknight

+0

धन्यवाद। मैं तकनीक के साथ जाऊंगा 2. –

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