2011-11-08 15 views
5

मेरे पास एक सेवा है जो onCreate() के दौरान धागा शुरू करती है। धागा हार्डवेयर (आईओआईओ) की निगरानी कर रहा है और एक बार डिस्कनेक्ट होने के बाद खत्म हो जाएगा, इसलिए संक्षेप में एक अनंत लूप है। एक गतिविधि से सेवा को रोकना ठीक काम करता है और धागा भी बंद हो जाता है (onDestory() में समाप्त)।एक थ्रेड के भीतर से एक एंड्रॉइड सेवा को रोकना

मेरी समस्या यह है कि अगर थ्रेड मर जाता है (अपवाद के कारण कहें) तो यह उस सेवा को रोकना संभव है जो इसे उत्पन्न करता है।

मैंने थ्रेड कोड के भीतर से stopSelf() का उपयोग करने का प्रयास किया है लेकिन सेवा बंद नहीं है।

धन्यवाद पीएस मेरी पहली पोस्ट इसलिए कृपया मुझे किसी भी लापता सम्मेलनों का बहाना देना चाहिए।

उत्तर

3

मुझे लगता है कि आप यहां क्या चाहते हैं Handler का उपयोग करना हो सकता है। अनिवार्य रूप से, अपने सेवर्स के लिए एक हैंडलर बनाएं (सुनिश्चित करें कि यह अंतिम है ताकि आप सभी धागे में उपयोग कर सकें)। फिर अपने अन्य धागे में, कॉल करें:

myServiceHandler.post(new Runnable(){ 
    public void run(){ 
    stopSelf(); 
    } 
} 
+0

बहुत बढ़िया है, इसलिए यह काम किया? –

+0

धन्यवाद बस – user1035795

+0

की आवश्यकता थी मुझे एक ही समस्या है और मैंने इस समाधान की कोशिश की। हालांकि, मैं देख सकता हूं कि stopSelf() msin धागे से निष्पादित किया गया है ... लेकिन कुछ भी नहीं होता है। और बाद में सेवा अभी भी इरादों का जवाब देती है। कोई सुराग? –

0

सेवा के इरादे को संग्रहीत करने और इसे सीधे रोकने के बारे में कैसे? सेवा में:

private Intent thisIntent; 

public int onStartCommand (Intent intent, int flags, int startId) { 

    thisIntent = intent; 

सेवा के अंदर धागा में:

stopService(thisIntent); 
संबंधित मुद्दे