2010-06-05 13 views
13

मेरे पास एक एंड्रॉइड सेवा है जिसे मैं पिछली गतिविधि को ढेर से पॉप करने के बाद भी चलाना चाहता हूं, या उपयोगकर्ता ने कुछ और करने का विकल्प चुना है।एंड्रॉइड सेवा कैसे जान सकती है कि यह किसी भी क्रियाकलाप से बंधी नहीं है

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

यदि उपयोगकर्ता सीधे ऐप से सहभागिता कर रहा है, तो सेवा गतिविधि को सूचित करेगी और परिवर्तनों के आधार पर उचित UI तत्व अपडेट करेगी। मैं पर्यवेक्षक पैटर्न के माध्यम से इसे लागू करने की योजना बना रहा हूं।

सेवा कैसे जान सकती है यदि कोई भी ऐप्स क्रियाएँ इसके लिए बाध्य नहीं हैं?

धन्यवाद, जम्मू

उत्तर

-2

कैसे सेवा पता कर सकते हैं अगर क्षुधा क्रियाएँ में से कोई भी इसे करने के लिए बाध्य कर रहे हैं?

यदि आप Observer सूची खाली हैं तो आप जानते हैं कि कोई बाध्य Activities नहीं है।

+4

और हमें पर्यवेक्षक सूची को कैसे/जांचना चाहिए? – Ewoks

+0

@Ewoks: यह इस बात पर निर्भर करता है कि आपने इसे कैसे कार्यान्वित किया। आप ध्यान दें कि ओपी ने इसे समझाया नहीं है। साथ ही, आपको पृष्ठ के ऊपरी-दाएं कोने में "प्रश्न पूछें" बटन मिलेगा। इसे आम तौर पर प्रश्नों और उत्तरों पर टिप्पणी करने के लिए खराब रूप माना जाता है - इसके बजाय एक नया प्रश्न पूछें। – CommonsWare

25

आप onBind, onUnbind और onRebind तरीकों के साथ एक बूलियन उपयोग करने की आवश्यकता:

public boolean bound; 

@Override 
public Binder onBind(Intent intent){ 
    bound = true; 
    return myBinder; //declare and init your binder elsewhere 
} 

@Override 
public boolean onUnbind(Intent intent) { 
    bound = false; 
    return true; // ensures onRebind is called 
} 

@Override 
public void onRebind(Intent intent) { 
    bound = true; 
} 

onUnbind केवल कहा जाता है जब सभी ग्राहकों को डिस्कनेक्ट कर दिया है। इस प्रकार बाध्यसच रहेंगे जब तक सभी क्लाइंट डिस्कनेक्ट नहीं हो जाते।

** नोट: गिल से प्रतिक्रिया के आधार पर संपादित किया गया। **

+0

यह ठीक है अगर आपको पता है कि आपके पास कभी भी केवल एक बाध्य ग्राहक होगा। लेकिन अगर आपके पास दो या दो से अधिक काम नहीं करेंगे। एक int में "बाध्य" बदलें और बाध्य ग्राहकों की संख्या का ट्रैक रखें। अन्यथा, आपके मामले में, यदि दो कनेक्टेड क्लाइंट हैं और डिस्कनेक्ट पर हैं, तो "बाध्य" को "झूठा" पर सेट किया जाएगा। – psiphi75

+1

@ psiphi75: onUnbind केवल तभी बुलाया जाता है जब सभी क्लाइंट डिस्कनेक्ट हो जाते हैं, इसलिए आपको बाध्य ग्राहकों की संख्या को ट्रैक रखने की आवश्यकता नहीं है। – SharkAlley

11

मैं शार्कएली के उत्तर पर टिप्पणी नहीं कर सकता, इसलिए मैं यहां फिर से खेलता हूं।

दुर्भाग्यवश ऑनबिंड() प्रत्येक बार ग्राहक कनेक्ट होने पर बुलाया जाता है। उदाहरण श्रीमती Hackborne का जवाब यहाँ देखें: https://groups.google.com/d/msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ

सम्भावित समाधान सच (onUnbind() पर और गलत) onBind() और onRebind() पर दोनों को सही पर onUnbind() से लौट सकते हैं और ध्वज सेट करने के लिए है।

+1

मैंने इसकी पुष्टि करने के लिए एक परीक्षण प्रोजेक्ट बनाया और मेरा जवाब अपडेट किया। प्रतिक्रिया के लिए धन्यवाद। – SharkAlley

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