2010-12-04 14 views
12

कृपया एक एंड्रॉइड Service समझाएं। Activity से यह अलग कैसे है? क्या यह अग्रभूमि/पृष्ठभूमि में चल रहे एप्लिकेशन स्थिति पर निर्भर करता है?एंड्रॉइड सेवा

उत्तर

28

की जाँच से पढ़ें Android Developer's SDK reference for Service:

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

यह नोट करना बहुत महत्वपूर्ण है

कि सेवाओं, अन्य अनुप्रयोग वस्तुओं, अपने होस्टिंग प्रक्रिया का मुख्य थ्रेड में चलाने की तरह। इसका मतलब यह है कि, यदि आपकी सेवा किसी भी CPU गहन (जैसे एमपी 3 प्लेबैक) या अवरुद्ध (जैसे नेटवर्किंग) संचालन करने जा रही है, तो उसे उस काम को करने के लिए अपने स्वयं के धागे को जन्म देना चाहिए।

यह एक गतिविधि है जो सबसे अच्छा कुछ एक उपयोगकर्ता सीधे देखता है और साथ सूचना का आदान रूप में समझा जाता के विपरीत है (एक यूआई।)

एक सेवा, जैसा कि ऊपर उल्लेख किया है, लंबे समय तक चलने वाली कार्यों के लिए इस्तेमाल किया जा सकता यह तब भी जारी रहेगा जब आपके पास कोई अग्रभूमि गतिविधि न हो, लेकिन अगर वे "पृष्ठभूमि" स्थिति में छोड़े गए तो एंड्रॉइड के जीवन चक्र द्वारा अंततः उन्हें मार दिया जाएगा। यदि आपको मारने और पुनरारंभ किए बिना एक ही उदाहरण के रूप में चलने के लिए अपनी सेवा की आवश्यकता है, तो मैं आपकी सेवा की onDestroy विधि में आपकी सेवा की onCreate विधि और stopForeground(boolean removeNotification) में startForeground(int id, Notification notification) रखने की अनुशंसा करता हूं।

उदाहरण के लिए, मेरे पास एक ऐप है जो foreground Service का उपयोग करता है ताकि पूरे रात एक्सेलेरोमीटर डेटा रिकॉर्ड किया जा सके जबकि एंड्रॉइड डिवाइस उपयोगकर्ता के शरीर के बगल में है। हालांकि यह सक्रिय होने के लिए आवश्यक नहीं है, मैं भी एक Activity कि Service जो Service बताता है कि यह भी एक BroadcastReceiverActivity अंदर करने के लिए एक्स्ट्रा कलाकार के रूप में accelerometer डेटा के साथ एक Intent प्रसारित करना चाहिए अंदर एक BroadcastReceiver के लिए एक Intent प्रसारित की है।

कोड: SleepActivity SleepAccelerometerService

गुड लक और आप किसी भी अधिक जानकारी की जरूरत है, तो मुझे पता है!

+1

आपका दूसरा लिंक "स्लीप एक्सेलेरोमीटर सेवा" टूटा हुआ है। – gonzobrains

+0

क्या आपको सोने की नींद आने पर भी आपकी सेवा को चलाने के लिए कुछ प्रकार के वेक लॉक का उपयोग करने की आवश्यकता है? – gonzobrains

+0

कृपया ध्यान दें कि प्रत्येक लंबे समय से चलने वाले और सीपीयू-गहन ऑपरेशन के लिए आप अपने सर्विस कोड को नए थ्रेड में चलाने के लिए चाहते हैं क्योंकि सेवाओं को डिफ़ॉल्ट रूप से चलाया जाता है और यूआई थ्रेड में रहते हैं। आप अपनी अधिकांश ज़रूरतों के लिए IntentService का उपयोग कर सकते हैं। हैंडलर थ्रेड और थ्रेडपूल एक्स्सेलर अधिक लचीला लेकिन अधिक जटिल विकल्प हैं। –

4

एक सेवा गतिविधि के समान एक संदर्भ है लेकिन इसमें कोई GUI नहीं है।

महत्वपूर्ण: एक सेवा नए धागे में नहीं चलती है!

Service के बारे में है और यह भी How to always run a service in the background?

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