2011-01-25 17 views
5

को अनधिकृत करने के लिए जब मेरे पास सेंसर मैनेजर के लिए unregisterListener के बारे में मूल प्रश्न है। इसे onStop() या onDestroy() में किया जाना चाहिए।एंड्रॉइड: श्रोता - ऑनस्टॉप() या ऑनस्ट्रोय()

USECASE:

मैं प्रारंभ बटन के क्लिक पर accelorometer रिकॉर्ड और बंद करो जब उपयोगकर्ता क्लिक बटन बंद करना चाहते हैं। डेटा की आवृत्ति हर मिनट है। तो मैंने timer शुरू किया है।

लेकिन यह समस्या हर बार orientation एंड्रॉइड आर्किटेक्चर के अनुसार बदलती है, onStop() कॉल किया जाता है। onStop() में मैं टाइमर को रद्द कर रहा हूं और श्रोता को अपंजीकृत कर रहा हूं।

फिर से अगर मैं onResume() में टाइमर/रजिस्टर श्रोता शुरू करता हूं तो आवृत्ति 1 मिनट तक नहीं रहेगी और डेटा को स्टार्ट बटन दबाए बिना उपयोगकर्ता रिकॉर्ड किया जाएगा।

क्या कोई इस समस्या को हल करने में मेरी सहायता कर सकता है।

धन्यवाद।

उत्तर

3

OnDestroy() कहने की गारंटी नहीं है। तो आप या तो या onStop

में यह करना चाहिए लेकिन इस मुद्दे को हर बार है प्रति एंड्रॉयड वास्तुकला

वहाँ प्रकट में ऐसा होने से रोकने के लिए एक रास्ता के रूप में उन्मुखीकरण बदल जाता है। मुझे यकीन है कि कोई और कैसे पोस्ट करेगा।

+0

मैं एंड्रॉयड को समझने (यह here के बारे में और अधिक पढ़ें) 'onDestroy' के लिए प्रलेखन का अर्थ यह है कि आपको डेटा को * सहेजना नहीं चाहिए, क्योंकि इसे कहने से पहले प्रक्रिया को मार दिया जा सकता है। हालांकि उस स्थिति में, कोई भी श्रोताओं सेंसर प्रबंधक के लिए पंजीकृत होगा। इसमें क्या नुकसान है? –

+0

ध्यान दें, 'ऑनस्टॉप' भी कॉल करने की गारंटी नहीं है। –

+0

ऑन पॉज़ केवल एक ही गारंटी है। मैंने ऐसे उदाहरण देखे हैं जहां ऑनटॉप को नहीं कहा जाता है, इसलिए ऐप पर वापस जाने पर एक नया खंड उदाहरण चालू होगा, और श्रोता को लीक किया जाता है (जब तक आप स्ट्रिंग टैग का उपयोग करके श्रोताओं को पंजीकृत नहीं करते हैं, और नया खंड पुराने श्रोता को बदल देता है) – James

4

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

या, यदि आप केवल रोटेशन 'जीवित रहने' के लिए, जब गतिविधि destoryed हो जाता है और उसके बाद फिर से बनाया चाहते हैं तो आपका ActivityonRetainNonConfigurationInstance() और getLastNonConfigurationInstance() तरीकों में अधिरोहण करने का प्रयास

+0

मैंने इसे रीटेनैन कॉन्फ़िगरेशन इंस्टेंस का उपयोग करके हल किया() और getLastNon कॉन्फ़िगरेशन इंस्टेंस() विधियां .. धन्यवाद –

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