2011-08-29 12 views
9

गतिविधि लाइफ साइकिल आरेख को देखते हुए, मुझे लगता है कि onPause() और onStop() दोनों "प्रक्रिया" को मारने के लिए नेतृत्व कर सकते हैं। जब उपयोगकर्ता अपने आवेदन को फिर से शुरू करना चाहता है तो उसे onCreate() की आवश्यकता होगी। बिंदु यह है कि onStop() आवश्यक रूप से नहीं कहा जाता है, न ही onDestroy() है, लेकिन onPause() गतिविधि केवल एक ही घटना हो सकती है। यह मामला है, onPause() को एप्लिकेशन की स्थिति को सहेजना चाहिए ताकि उपयोगकर्ता बाद में वापस लौट सके, भले ही onStop() कहा जाता है या नहीं।एंड्रॉइड ऑनस्टॉप/ऑन डिस्ट्रॉय - इनका इस्तेमाल कब किया जा सकता है?

मैं onDestroy() देख सकता हूं कि गतिविधि विशिष्ट संसाधनों को साफ करने के लिए उपयोग किया जा रहा है जो एक प्रक्रिया को मारने की प्रक्रिया में स्वाभाविक रूप से समाप्त हो जाएंगे। क्या कोई और चीज है जो onDestroy() के लिए अच्छा होगा?

और onStop() क्या होगा? मैं इसके लिए ओवरराइड क्यों करना चाहूंगा?

उत्तर

4

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

+0

ऑनस्टॉप() का क्या? – user574771

+0

क्षमा करें, मैं 'ऑनस्टॉप()', लैप्सस mentis का जिक्र कर रहा था। :) मैं अपना उत्तर –

+0

संपादित करूँगा, ऐसा लगता है कि गतिविधि के जवाब में अब आप स्टॉप() पर उपयोग नहीं करते हैं, और ऑन-पॉज़() जीपीएस प्रदाता को रिलीज़ करने के लिए समयपूर्व होगा। लेकिन मेरी चिंता यह है कि प्रक्रिया मारने से संसाधन की रिहाई को सही तरीके से संभाल नहीं सकता है। – user574771

0

अन्य उदाहरण एक प्रसारण रिसीवर रजिस्टर और पंजीकरण रद्द करना होगा।

ध्यान दें कि आम तौर पर इन चीजों को रेज़्यूम और ऑनपॉज़ पर रखा जाता है, हालांकि अंतर सूक्ष्म है, फिर भी जब किसी अन्य गतिविधि के पीछे गतिविधि को रखा जाता है, तो ऑन/ऑन रोकें, स्टार्ट/ऑनस्टॉप को तब कॉल किया जाता है जब गतिविधि अब दिखाई नहीं दे रही है स्क्रीन।

+0

और दूसरा सूक्ष्म अंतर यह है कि यदि वे स्टार्ट एंड स्टॉप हैं, तो क्या होता है जब ऑनटॉप को नहीं कहा जाता है, लेकिन प्रक्रिया में मारे गए? क्या प्रसारण रिसीवर स्पष्ट रूप से अनियंत्रित है? मुझे लगता है कि यह है। – user574771

2

आप दस्तावेज़ में आगे पढ़ लिया है, तो आप निम्नलिखित दिखाई देगा:

सहेजा जा रहा है गतिविधि राज्य

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

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

सारांश: onStop() पूरा करने के बाद गतिविधि वस्तु अभी भी स्मृति में जिंदा है। और यह सिस्टम को गतिविधि को बहाल करने में मदद करेगा।

बहुत ही बुनियादी उदाहरण: मान लें कि आप उपयोगकर्ता को अपनी गतिविधि दिखा रहे हैं, और अचानक आपका मित्र आपको कॉल करता है! बाकी आप समझ सकते हैं ..

तो अब यह आप पर निर्भर करता है कि कौन से ईवेंट/संसाधन/कनेक्शन जारी किए जाने चाहिए।

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