2011-10-14 26 views
119

क्या आप कृपया मुझे समझने में मदद कर सकते हैं कि IntentService और Service के बीच क्या अंतर है?एक इंटेंट सेवा और सेवा के बीच क्या अंतर है?

+1

http://techtej.blogspot.com.es/2011/03/android-thread-constructspart-4.html –

+5

सच अच्छा यहाँ तुलना: http://stackoverflow.com/प्रश्न/15524280/सेवा-बनाम मंशा सेवा – Moemars

+1

कृपया उपर्युक्त लिंक पर जाएं जो वे वास्तव में अच्छे हैं .. उनके लिए बहुत बड़ा धन्यवाद ... –

उत्तर

110

संक्षेप में, डेवलपर पृष्ठभूमि कार्यों को स्थापित करने के लिए एक व्यापक कार्यान्वयन है, जबकि एक इंटेंट सेवा पृष्ठभूमि की थ्रेड सृजन और सफाई की देखभाल करते हुए "आग और भूलने" संचालन के लिए उपयोगी है।

डॉक्स से:

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

IntentService सेवा IntentService वे सेवाएं जिन (उद्देश्य के रूप में व्यक्त) मांग पर अतुल्यकालिक अनुरोध को संभाल के लिए एक आधार वर्ग है। ग्राहक startService(Intent) कॉल के माध्यम से अनुरोध भेजते हैं; सेवा आवश्यकतानुसार शुरू की जाती है, कार्यकर्ता धागे का उपयोग करके प्रत्येक इरादे को बदले में रखती है, और जब यह काम से बाहर हो जाती है तो खुद को रोक देती है।

इस दस्तावेज़ के संदर्भ लें - http://developer.android.com/reference/android/app/IntentService.html

+6

IntentService सेवाओं का आधार वर्ग नहीं है। इसके विपरीत यह सच है। जांचें - http://developer.android.com/reference/android/app/IntentService.html – Darpan

+5

@ डारपैन यह "सेवाओं" के लिए नहीं, "सेवाओं को अतुल्यकालिक अनुरोधों को संभालती है" के लिए आधार श्रेणी है। यही कारण है कि उपरोक्त वाक्य सही है। – nucleo

+0

हाय सब, क्या मैं एक सेवा के भीतर एक इरादा सेवा लिख ​​सकता हूं? यदि हां, तो कृपया कोई उदाहरण/कोड स्निपेट प्रदान कर सकता है। धन्यवाद –

58

सेवा: यह आपके सिस्टम पर पृष्ठभूमि में चलता है। उदाहरण के लिए,

  1. यदि आप एक होटल के पास गया और यदि आप किसी सर्वर
  2. सर्वर अपने आदेश हो जाता है और शेफ के लिए भेजता है
  3. आप कैसे सूप है पता नहीं है के लिए एक सूप के लिए अपने आदेश देना रसोई में बने और सूप बनाने के लिए कौन सी प्रक्रियाओं की आवश्यकता होती है
  4. एक बार आपका ऑर्डर तैयार हो जाने पर, सर्वर आपको सूप लाता है।

पृष्ठभूमि प्रक्रिया: महाराज बनाने सूप

IntentService: - यह लगातार सेवा .. (यानी) सर्वर से एक समय में कई खाद्य पदार्थों के आदेश लेकिन सर्वर ने एक-एक करके उन वस्तुओं एक बचाता है और उन्हें एक ही समय में वितरित न करें।

+7

मुझे आपकी व्याख्या की शैली पसंद है। –

+2

क्षमा करें, लेकिन यह दोनों के बीच महत्वपूर्ण अंतर गुम है .. – eRaisedToX

+0

"लगातार सेवा" से आपका क्या मतलब है? –

12

Service वास्तव में आपके ऐप के उसी थ्रेड में चलता है; जब आप सेवा बढ़ाते हैं, तो आपको CPU अवरोधन संचालन चलाने के लिए मैन्युअल रूप से नए धागे को स्पॉन करना होगा।

बनाम

IntentServiceService का एक उपवर्ग जो वहाँ से पृष्ठभूमि काम करने के लिए एक धागा (सीपीयू अवरुद्ध संचालन करने के लिए एक नया धागा बनाने के लिए कोई ज़रूरत नहीं) spawns है।

+0

सीपीयू अवरुद्ध संचालन को रोकने के लिए नहीं है, उन्हें चलाने के लिए नहीं? मुझे यकीन नहीं है कि – committedandroider

+0

यह सच है, सीपीयू अवरोधन संचालन चलाने के लिए सेवा को एक नया धागा नया बनाना –

91

Service सेवा कार्यान्वयन का एक आधार वर्ग है। Service एप्लिकेशन के मुख्य थ्रेड में चलाया गया है जो एप्लिकेशन प्रदर्शन को कम कर सकता है। इस प्रकार, IntentService, जो सेवा का प्रत्यक्ष उप-वर्ग है, चीजों को आसान बनाने के लिए उपलब्ध है।

IntentService पृष्ठभूमि में एक निश्चित कार्य करने के लिए उपयोग किया जाता है। एक बार हो जाने पर, IntentService का उदाहरण स्वचालित रूप से समाप्त हो जाता है।इसके उपयोग के लिए उदाहरण इंटरनेट से एक निश्चित संसाधन डाउनलोड करना होगा। जबकि IntentService एक कार्यकर्ता धागा बनाता है और सेवा को चलाने के लिए कि धागा का उपयोग करता

मतभेद

  1. Service वर्ग, आवेदन के मुख्य थ्रेड उपयोग करता है।
  2. IntentService एक कतार बनाता है जो एक समय में onHandleIntent() पर एक इरादा पास करता है। इस प्रकार, एक बहु-थ्रेड को लागू करना Service कक्षा को सीधे बढ़ाकर किया जाना चाहिए। Service कक्षा को stopSelf() का उपयोग कर मैन्युअल स्टॉप की आवश्यकता है। इस बीच, IntentService निष्पादन समाप्त होने पर स्वचालित रूप से बंद हो जाता है।
  3. IntentServiceonBind() लागू करता है जो null देता है। इसका मतलब है कि IntentService डिफ़ॉल्ट रूप से बाध्य नहीं किया जा सकता है।
  4. IntentServiceonStartCommand() लागू करता है जो कतार और onHandleIntent() पर इरादा भेजता है।

संक्षेप में, IntentService का उपयोग करने के लिए केवल दो चीजें हैं। सबसे पहले, कन्स्ट्रक्टर को लागू करने के लिए। और दूसरी बात, onHandleIntent() को लागू करने के लिए। अन्य कॉलबैक विधियों के लिए, सुपर को कॉल करने की आवश्यकता होती है ताकि इसे ठीक से ट्रैक किया जा सके। जबकि IntentService एक कार्यकर्ता धागा बनाता है और सेवा को चलाने के लिए कि धागा का उपयोग करता

+0

अच्छी व्याख्या। मैं संगीत ऐप बना रहा हूं। तो, इसके लिए कौन सा अच्छा होगा? सेवा या मंशा सेवा? –

+7

संगीत ऐप के लिए मुझे लगता है कि आपको सेवा का उपयोग करना है क्योंकि डिफ़ॉल्ट रूप से, IntentService अविश्वसनीय है और, मुझे लगता है कि आपको संगीत संगीत के साथ शुरू करने के लिए अपने संगीत ऐप को बाध्य करना होगा। जैसा कि पहले से ही कहा गया है, "प्रारंभ और भूलना" के लिए इरादा सेवा बेहतर है – Premier

+0

@ प्रीमियर इरादा सेवा सेवा के समान नहीं होगी। START_NOT_STICKY? जैसा कि आपके उदाहरण के अनुसार "प्रारंभ और भूलना" भी है। –

3

मतभेद

  1. सेवा वर्ग, आवेदन के मुख्य थ्रेड उपयोग करता है।
  2. IntentService एक कतार बनाता है जो एक समय में एक उद्देश्य को HandleIntent() पर पास करता है। इस प्रकार, एक बहु-थ्रेड को लागू करना सीधे सेवा वर्ग को विस्तारित करके किया जाना चाहिए।
  3. सर्विस क्लास को StopSelf() का उपयोग करके मैन्युअल स्टॉप की आवश्यकता होती है। इस बीच, कतार में कोई इरादा नहीं होने पर IntentService स्वचालित रूप से स्वयं को रोक देता है।
  4. IntentService लागू करता है() जो शून्य देता है। इसका मतलब है कि IntentService डिफ़ॉल्ट रूप से बाध्य नहीं किया जा सकता है।
  5. इंटेंट सेवा सेवा स्टार्ट कमांड() पर लागू होती है जो कतार और आंडलइन्टेंट() पर इरादा भेजती है।
+1

सेवा स्टार्ट कमांड पर भी लागू नहीं होती है? –

5

Service: मुख्य थ्रेड में काम करता है तो यह कुछ सेकंड के बाद एक ANR (एंड्रॉयड प्रतिसाद नहीं) का कारण होगा।

IntentService: Service एक अन्य पृष्ठभूमि थ्रेड के साथ मुख्य धागे के साथ बातचीत किए बिना कुछ करने के लिए अलग से काम कर रहा है।

+0

* सेवा: मुख्य धागे में काम करता है, इसलिए यह कुछ सेकंड के बाद एएनआर (एंड्रॉइड नॉट प्रतिसाद) का कारण बनता है। * - मेरे पास घंटों और घंटों तक चलने वाली सेवा हो सकती है और मैंने कभी एएनआर नहीं देखा है, इसलिए मुझे संदेह है कि सच हैं। –

1

आशय सेवा सेवा

की

IntentService बच्चा है: आप आपका ऐप्लिकेशन खोलने के शुरू में छवियों का एक गुच्छा डाउनलोड करना चाहते हैं। यह एक बार की प्रक्रिया है और सबकुछ डाउनलोड होने के बाद खुद को साफ कर सकता है।

सेवा: एक सेवा जिसका उपयोग लगातार आपके ऐप और वेब एपीआई कॉल के साथ बैक-एंड के बीच संवाद करने के लिए किया जाएगा।यहां तक ​​कि अगर यह अपने वर्तमान कार्य के साथ समाप्त हो गया है, आप अभी भी इसे और अधिक संचार

9

सेवा

  • कोई यूआई के साथ कार्य करने के लिए कुछ ही मिनट बाद आसपास होने के लिए, चाहते हैं, लेकिन लंबे समय तक कार्य के लिए उपयोग नहीं करना चाहिए । द्वारा onStartService()
  • किसी भी थ्रेड से उत्प्रेरित लंबे टास्क
  • आह्वान के लिए सेवा के भीतर थ्रेड का उपयोग करें
  • चलाता मुख्य थ्रेड पर
  • ब्लॉक मई main(UI) धागा

IntentService

  • लंबे काम आमतौर पर मुख्य वें के साथ कोई संचार नहीं है पढ़ संचार तो यह हैंडलर के द्वारा किया या आशय
  • मुख्य थ्रेड से शुरू हो रहा के माध्यम से प्रसारित
  • आह्वान किया जाता है की जरूरत है, तो अलग थ्रेड
  • पर ( आशय मुख्य थ्रेड और कार्यकर्ता धागे पर प्राप्त होता है spawed है)
  • रन
  • हम समानांतर में कार्य नहीं चला सकते हैं और एक ही कार्यकर्ता धागे पर कई इरादों को कतारबद्ध किया जाता है।
3

सेवा

यह सभी सेवाओं के लिए आधार वर्ग है। जब आप इस वर्ग का विस्तार करते हैं, तो यह महत्वपूर्ण है कि आप एक नया थ्रेड बनाएं जिसमें सभी सेवा के काम करने के लिए, क्योंकि सेवा डिफ़ॉल्ट रूप से आपके एप्लिकेशन के मुख्य थ्रेड का उपयोग करती है, जो आपके एप्लिकेशन के चल रहे किसी भी गतिविधि के प्रदर्शन को धीमा कर सकती है।

IntentService

यह है कि सभी अनुरोधों, एक समय में एक शुरू संभालने के लिए एक कार्यकर्ता धागा का उपयोग करता है सेवा के एक उपवर्ग है। यदि आपको आवश्यकता नहीं है कि आपकी सेवा एक साथ कई अनुरोधों को संभालती है तो यह सबसे अच्छा विकल्प है। आपको केवल इतना करना है कि हैंडलइन्टेंट() पर लागू किया गया है, जो प्रत्येक प्रारंभ अनुरोध के लिए मंशा प्राप्त करता है ताकि आप पृष्ठभूमि कार्य कर सकें। जबकि IntentService एक कार्यकर्ता धागा बनाता है और सेवा को चलाने के लिए कि धागा का उपयोग करता

मतभेद

सेवा वर्ग, आवेदन के मुख्य थ्रेड उपयोग करता है। IntentService एक कतार बनाता है जो एक समय में एक उद्देश्य को HandleIntent() पर पास करता है। इस प्रकार, एक बहु-थ्रेड को लागू करना सीधे सेवा वर्ग को विस्तारित करके किया जाना चाहिए। सर्विस क्लास को StopSelf() का उपयोग करके मैन्युअल स्टॉप की आवश्यकता होती है। इस बीच, कतार में कोई इरादा नहीं होने पर IntentService स्वचालित रूप से स्वयं को रोक देता है। IntentService लागू करता है बाइंड() जो शून्य देता है। इसका मतलब है कि IntentService डिफ़ॉल्ट रूप से बाध्य नहीं किया जा सकता है। IntentServiceStartCommand() पर लागू होता है जो कतार में और HandleIntent() पर इरादा भेजता है।

31

इस विषय के बारे में तेजस लागवंकर के post देखें। नीचे सेवा और मंशा सेवा और अन्य घटकों के बीच कुछ महत्वपूर्ण अंतर हैं।

enter image description here

+1

अच्छी टैब्यूलर जानकारी –

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