2010-08-25 12 views
43

मैं काफी Android विकास के लिए नया हूँ।एंड्रॉइड: सेवा बनाम सिंगलटन का उपयोग कब करें?

जब यह एक अच्छा विचार एक Android सेवा बनाने के लिए के बजाय सिर्फ एक सरल सिंगलटन वर्ग का उपयोग कर रहा है?

उदाहरण के लिए, डेटा परत जानकारी डाउनलोड इंटरनेट से फ़ीड।

किसी सेवा का उपयोग करना कुछ मामलों के लिए बहुत अधिक लगता है लेकिन कभी-कभी मुझे Context तक पहुंच की आवश्यकता हो सकती है, इसलिए मुझे ऐप को डिज़ाइन करने के बारे में कुछ अनिश्चितता है।

उत्तर

42

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

इन दो के बीच निर्णय केवल आपके ऐप के जीवन चक्र में आता है। इस उद्देश्य के लिए, यह एक सेवा है - मंच को अपनी प्रक्रिया के प्रबंधन को संशोधित करने के लिए कहें। यदि आप एक सिंगलटन में एक संदर्भ की जरूरत है, बस Context.getApplicationContext() का उपयोग अपनी प्रक्रिया के लिए वैश्विक संदर्भ पुनः प्राप्त करने के।

+5

पहले अनुच्छेद की अंतिम वाक्य थोड़ा उलझन में है। क्या आप इसे थोड़ा सा कर सकते हैं? – chakrit

+0

मुझे लगता है कि इसका मतलब है: जब आप इसे छोड़ने के बाद चलने की प्रक्रिया को प्राथमिकता देते हैं, तो केवल एक सिंगलटन का उपयोग करें, लेकिन केवल अगर स्मृति की कहीं और आवश्यकता नहीं है। – mparaz

+1

तो, जानकारी फ़ीड डाउनलोड के आपके उदाहरण के लिए, मैं * अनुमान लगाता हूं * यदि उन फीड को इंटरनेट सर्वर पर बफर किया गया था जो उन्हें प्रदान करता है, ताकि जब भी उपयोगकर्ता आपके ऐप पर वापस आ जाए, * या * यदि आप केवल देखभाल करते हैं फीड से नए आइटम को प्रोसेस करने के बारे में, और एक निर्बाध इतिहास प्रदर्शित करने के बारे में नहीं, * फिर * आप एक सिंगलटन के साथ ठीक रहेगा, लेकिन अगर आपको फ़ीड की निगरानी रखने के लिए अपने ऐप की आवश्यकता होती है तो उपयोगकर्ता कुछ और कर रहा था, तो आप चाहते हैं एक सेवा। बस इसे थोड़ा और असली ... दिलचस्प सवाल बनाने की कोशिश कर रहा है। – Carl

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