2012-12-09 9 views
30

यह एक बेवकूफ सवाल हो सकता है लेकिन मैं जानना चाहता हूं कि bindService और startService का उपयोग कब करना है।जब bindService का उपयोग करने के लिए स्मार्ट है और जब startService

उदाहरण के लिए:

अगर मैं BIND_AUTO_CREATE साथ bindService उपयोग करते हैं, सेवा शुरू कर दिया और के रूप में यहाँ लिखा है स्वचालित रूप से बनाया जाएगा: http://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE

जब यह तो bindService और जब startService उपयोग करने के लिए स्मार्ट है? मैं वास्तव में इन दोनों को सही ढंग से समझ नहीं पा रहा हूं।

+0

की संभावित डुप्लिकेट [एंड्रॉयड सेवा startService() और bindService()] (http://stackoverflow.com/questions/3514287/android-service-startservice-and-bindservice) –

उत्तर

55

आप आमतौर पर bindService() का उपयोग करता है, तो आपके फोन करने के घटक (Activity) ServiceConnection के माध्यम से, Service है कि आप शुरू कर रहे हैं के साथ संवाद करने की आवश्यकता होगी। यदि आप Service के साथ संवाद नहीं करना चाहते हैं तो आप केवल startService() का उपयोग कर सकते हैं। आप सेवा और बाध्य सेवा के बीच अंतर को नीचे देख सकते हैं।

डॉक्स से:

प्रारंभ

एक सेवा है "शुरू कर दिया" एक आवेदन घटक (जैसे कि एक गतिविधि के रूप में) startService को फोन करके यह शुरू होता है जब()। एक बार शुरू होने के बाद, एक सेवा पृष्ठभूमि में अनिश्चित काल तक चल सकती है, भले ही उस घटक ने इसे शुरू किया हो। आम तौर पर, एक प्रारंभिक सेवा एक एकल ऑपरेशन करती है और कॉलर को परिणाम नहीं देता है। उदाहरण के लिए, यह नेटवर्क पर फ़ाइल डाउनलोड या अपलोड कर सकता है। जब ऑपरेशन किया जाता है, तो सेवा स्वयं को रोकनी चाहिए।

बाउंड

एक सेवा "बाध्य" है एक आवेदन घटक bindService को फोन करके यह करने के लिए बांधता जब()। एक बाध्य सेवा क्लाइंट-सर्वर इंटरफ़ेस प्रदान करती है जो घटकों को सेवा के साथ बातचीत करने, अनुरोध भेजने, परिणाम प्राप्त करती है, और इंटरप्रोसेस संचार (आईपीसी) के साथ प्रक्रियाओं में भी ऐसा करती है। एक बाध्य सेवा तब तक चलती है जब तक कि एक अन्य अनुप्रयोग घटक इसके लिए बाध्य न हो। कई घटक एक बार में सेवा से जुड़ सकते हैं, लेकिन जब उनमें से सभी अनइंड होते हैं, तो सेवा नष्ट हो जाती है।

आप यहाँ और अधिक पढ़ सकते हैं: Android Services, Bound Services

16

मैं @Ovidiu Latcu साथ लेकिन एक महत्वपूर्ण टिप्पणी से सहमत: जब बाध्य सेवाओं का उपयोग कर, सेवा जब गतिविधि है कि यह शुरू कर दिया समाप्त हो गया है समाप्त हो गया है, (यदि यह उस सेवा से जुड़ी एकमात्र गतिविधि है)।

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

+0

अच्छा जानकारी –

+0

भी आप सेवा शुरू कर सकते हैं और बाद में इसके लिए बाध्य - इस तरह से इसे रोकने तक चलना जारी रहेगा। – benchuk

+1

मैं एक सेवा से परिणाम प्राप्त करने ('BroadcastReceiver' या किसी अन्य विकल्प का उपयोग करके) प्राप्त करने पर विचार करूंगा जो केवल 'startService()' से शुरू हुआ है और उसके और ग्राहकों के बीच ** खराब अभ्यास ** के रूप में कोई बाध्यकारी नहीं है क्योंकि, जैसा कि Ovidiu Latcu उद्धृत, एक ** शुरू ** सेवा आमतौर पर कॉलर (क्लाइंट) के लिए परिणाम_ वापस नहीं लौटाती है, ** बाध्य ** सेवा के विपरीत जो क्लाइंट-सर्वर इंटरफ़ेस प्रदान करती है जो घटकों को सेवा के साथ बातचीत करने की अनुमति देती है, भेजती है अनुरोध, _receive परिणाम _...। – Eido95

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