2011-08-17 6 views
6

अभी मुख्य गतिविधि (अधिनियम ए) एक सेवा शुरू करती है जिसमें ब्लूटूथ कनेक्शन होता है। (यह सेवा बांधता है)एक सेवा साझा करने वाली दो गतिविधियां सर्वोत्तम रूप से कैसे कार्यान्वित करें (डब्ल्यू ब्लूटूथ कनेक्शन)?

सेवा BluetoothChatService (एंड्रॉयड BluetoothChat नमूना) का एक संशोधित संस्करण ... ... एक मैसेंजर और हैंडलर MessengerService (एंड्रॉयड रिमोट मैसेंजर नमूना) के अनुसार जोड़ा

साथ संशोधित है

गतिविधि ए सुनिश्चित करता है कि ब्लूटूथ किसी बाहरी डिवाइस से कनेक्ट है, और बाद में दूसरी गतिविधि (अधिनियम बी) शुरू होता है।

समस्या यह है कि सेवा को जारी रखने के लिए और ब्लूटूथ कनेक्शन को नई गतिविधि में आसानी से सेवा प्रदान करना है। ,

  • सुनिश्चित करें कि सेवा को पुन: प्रारंभ या reinstanced नहीं हुआ है जब यह (से गतिविधि एक से स्विच बी को

  • सुनिश्चित करें कि messenging ठीक तरह से काम के रूप में वांछित बनाओ: मैं नहीं जानता कि कैसे करने के लिए वर्तमान में सक्रिय गतिविधि)

मैं नई गतिविधि के लिए सेवा rebind करने की आवश्यकता है, और कैसे मैं विश्वास दिलाता हूं कि बीटी कनेक्शन सेवा के अन्य उदाहरण के कारण खो नहीं है() करते हैं? या क्या मुझे मैसेन्जर ऑब्जेक्ट के साथ नई गतिविधि में अल्रेड तत्काल सेवा के साथ संवाद करने की आवश्यकता है। यदि हां, तो मैं यह कैसे कर सकता हूं?

उत्तर के लिए बहुत आभारी!

उत्तर

1

आप या तो Application उपclass और वहां स्टोर जानकारी (here देखें), या आप अपनी "सेवा" एक सिंगलटन बना सकते हैं, इसलिए इसमें अपने स्वयं के प्रकार का एक स्थिर सदस्य है जिसे आप केवल तभी प्रारंभ करते हैं जब आप शून्य हो जाएं।

6

सेवा "चिपचिपा" बनाएं ताकि यह चलना जारी रहे। और अपनी 2 गतिविधियों के लिए आधार गतिविधि वर्ग बनाएं। आधार गतिविधि वर्ग सेवा के साथ बाध्यकारी और उचित संचार प्रदान करने की सभी सामान्य कार्यक्षमताओं को संभाल सकता है। जब गतिविधियां फिर से शुरू होती हैं तो गतिविधियां रोकती हैं और गतिविधियों में बाध्यकारी होने पर मैं निश्चित रूप से आपकी सेवा को अनबाइंड करने की अनुशंसा करता हूं। लेकिन यह आम आधार वर्ग गतिविधि में एक बार किया जा सकता है।

सेवा के लिए बाध्यकारी केवल तभी शुरू होना चाहिए यदि यह पहले से नहीं चल रहा है और यदि आप फिर से शुरू/रोकें में बाध्य/अनबाइंड करते हैं तो आपके पास किसी भी समय सेवा के लिए केवल एक सक्रिय कनेक्शन होना चाहिए।

1

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

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