2011-09-27 10 views
9

मैंने एक सेवा बनाई और यह अपेक्षित काम नहीं किया, इसलिए मैंने इसे डीबग किया। डिबगिंग के दौरान, मैंने देखा कि सेवा पर ऑनस्ट्राय() विधि को सीधे क्रिएट() से लौटने के बाद कहा जाता है। जब मैं ऑनस्ट्राय() में होने वाली सफाई को टिप्पणी करता हूं, तो सेवा इसका काम करती है, लेकिन यह मेरा समाधान नहीं होना चाहिए। तो मेरा सवाल यह है कि, डेस्ट्रॉय() को इतनी जल्दी क्यों कहा जाता है और सेवा क्यों चल रही है? या मैं गलत समय पर कॉल करने से डेस्ट्रॉय() को कैसे रोक सकता हूं?Service.onDestroy() को सृजन के बाद सीधे कहा जाता है, वैसे भी सेवा अपना काम करती है

आपकी जानकारी के लिए: मैंने IntentService को उप-वर्गीकृत किया है।

किसी भी मदद के लिए धन्यवाद।

Binabik

+3

क्या आप इस समस्या को प्रदर्शित करने वाले आपके कोड का एक अलग संस्करण पोस्ट कर सकते हैं? – slayton

+1

मुझे लगता है कि हमें यह जानने की जरूरत है कि सेवा कैसे शुरू की जाती है और आपने सेवा वर्ग को उप-वर्गीकृत क्यों नहीं किया। –

उत्तर

15

आप आप अपनी सेवा के जीवन चक्र के लिए onHandleIntent(Intent intent) का उपयोग करना चाहिए IntentService उपवर्गीकरण रहे हैं। आपकी सेवा जल्दी से डेस्ट्रॉय पर जा रही है क्योंकि आपके पास हैंडलइन्टेंट पर कोड नहीं है। हालांकि आपके कोड के बिना मैं निश्चित रूप से नहीं कह सकता।

इसके अलावा यह संभवतः डेस्ट्रॉय पर आगे बढ़ सकता है क्योंकि IntentService आपके लिए स्वत: थ्रेड किया गया है और हो सकता है कि वह कार्यकर्ता थ्रेड लॉन्च करे जो हैडलइन्टेंट पर कॉल करता है और डेस्ट्रॉय पर जाता है।

+8

आपकी मदद के लिए धन्यवाद। मैंने इसे दोबारा जांच लिया और अब मैं समझता हूं कि एक इंटेंट सेवा का उपयोग करना एक बुरा विचार था क्योंकि एक IntentService हैन्डलइन्टेंट() से लौटने के बाद खुद को रोक देता है। मैंने यह भी पाया कि दस्तावेज़ीकरण में: "IntentService निम्न कार्य करता है: [...] सभी प्रारंभ अनुरोधों को संभालने के बाद सेवा बंद कर देता है, इसलिए आपको कभी भी StopSelf() को कॉल नहीं करना पड़ेगा।" मैं एक "सामान्य" सेवा के साथ प्रयास करूंगा। – Binabik

+0

आपने मेरा जीवन बचाया :), धन्यवाद। – ondermerol

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