2012-10-14 20 views
6

चलाने के लिए कैसे करें I Intentservice के दो उदाहरण हैं। कॉमन्सवेयर पुस्तक में डाउनलोड उदाहरण है। दूसरा http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler पर है। इन दोनों उदाहरणों में एक सीमित कार्य निष्पादित करने वाली सेवा दिखाती है और वे दोनों ही हैंडलइन्टेंट घटना के दायरे के अंत तक चलकर खुद को नष्ट कर देते हैं।एक इरादा सेवा को

जो सेवा मैं लिख रहा हूं वह घटनाएं और चीजों को सुनना है। एक जीपीएस आंदोलन के लिए एक स्थान लिस्टर सुन रहा है। दूसरा एक आरईएसटी सेवा के लिए पोस्ट बनाता है और जवाब के लिए सुनता है। मैं इसे तब तक चलाना चाहता हूं जब तक कि समय बीत न जाए या जब तक इसे शुरू करने वाली गतिविधि से बाहर निकलने के लिए कहा न जाए।

मैं इसे कैसे जारी रखूं? उदाहरण के लिए, क्या मैं लोकेशन लिस्टर के कार्यान्वयन को कहूं? धन्यवाद, गैरी

+0

मुझे भी एक ही प्रश्न का उत्तर चाहिए, मेरे मामले में मैं विजेट से फ्लैशलाइट शुरू कर रहा हूं, लेकिन इसकी हत्या हो रही है। – user2548816

उत्तर

13

मैं इसे कैसे चल रहा है रहते हो?

आप नहीं करते हैं। IntentService को काम का एक टुकड़ा करने के लिए डिज़ाइन किया गया है (या शायद कतार से कुछ, अगर आदेश तेजी से आते हैं), तो बंद करें।

जो सेवा मैं लिख रहा हूं वह घटनाएं और चीजों को सुनना है।

तब आपको IntentService का उपयोग नहीं करना चाहिए। आवश्यकतानुसार अपने स्वयं के पृष्ठभूमि धागे के साथ नियमित Service का उपयोग करें।

+2

क्या कोई इस उत्तर को अर्हता प्राप्त कर सकता है? IntentService सेवा का एक उप-वर्ग है, तो लंबे समय से चल रहे/चल रहे संचालन के लिए केवल बाद में क्यों उपयोग किया जाना चाहिए (नए धागे में) ?? –

+0

@ प्रतिबंध-जियोइंजिनियरिंग: जैसा कि मैंने लिखा था, 'इंटेंट सेवा' को लेनदेन संबंधी परिचालनों के आसपास डिजाइन किया गया था, जहां काम काफी तेज़ी से किया जाता है और सेवा को बंद कर दिया जाना चाहिए। यदि आप ऐसा कुछ चाहते हैं जो उससे अधिक समय तक चलेगा, तो 'सेवा' स्वयं बंद होने पर (या स्टॉप सेवा() 'के माध्यम से किसी ग्राहक द्वारा रोक दिया जाता है) के लिए अपने स्वयं के नियंत्रण के साथ अपनी 'सेवा' बनाएं। – CommonsWare

+0

मैं समझता हूं कि आपने क्या कहा है, लेकिन मैं जानना चाहता हूं कि आपको यह जानकारी कहां मिली है, इसलिए मैं अपने लिए यह सत्यापित कर सकता हूं कि यह वास्तव में मामला है। –

-1

आप दो तरीकों में से किसी में इस लक्ष्य को हासिल कर सकते हैं,

AlarmManager एंड्रॉयड के इन-buite वर्ग है कि आप पर कुछ कार्रवाई को निष्पादित करने की अनुमति देता है विशेष समय peroid।

टाइमरटास्क अलार्ममेनर के समान काम करता है, आप बार-बार अपने कोड की कुछ क्रिया दोहरा सकते हैं।

हालांकि अलार्ममेनर निष्पादन में लिगर है इसलिए मैं आपको अलार्ममेनगर क्लास के साथ जाने का सुझाव देता हूं।

एक अलार्ममेनर बनाएं जो जीपीएस समन्वय प्राप्त करता है और उन्हें नियमित अंतराल के आधार पर सर्वर पर पोस्ट करता है।

इस अलार्ममेनगर Example पर एक नज़र डालें।

+0

आपके सुझावों में से कोई भी इरादा सेवा को नष्ट होने से रोक नहीं पाएगा। हैंडल इन्टेंट विधि में इंतजार किए बिना आप इसे जीवित नहीं रख सकते हैं। – bluewhile

+0

@bluewhile मुझे लगता है कि लूसिफर मूल रूप से इस विशेष कार्य के लिए IntentService का उपयोग करने का विकल्प प्रदान कर रहा है। – AnixPasBesoin

-1

सेवा चलाने के लिए, आपकी सेवा को सेवा विधि onStartCommand() में START_STICKY वापस करने की आवश्यकता है।

इसके साथ, यदि आप अपनी गतिविधि के बाहर निकलेंगे तो भी सेवा चल रही होगी।

नोट: एंड्रॉयड अभी भी कुछ समय (1 घंटा 30 mintus) ऐसी सेवाओं का अग्रभूमि नहीं कर रहे हैं के बाद सेवाओं को मारता है। इसे अग्रभूमि बनाने के लिए startForeground(notification) का उपयोग करें।

सौभाग्य

+2

यह यह नहीं बताता कि इंटेन्स सेवा को अनिश्चित काल तक कैसे चलाया जाए। –

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