android - वास्तव में गतिविधि क्या है। फिनिश() विधि कर रही है?




activity-lifecycle ondestroy (8)

मैं थोड़ी देर के लिए एंड्रॉइड अनुप्रयोगों का विकास कर रहा हूं, और गतिविधि जीवन चक्र, और आवेदन के जीवन चक्र के बारे में कई पदों का पालन किया।

मुझे Activity.finish() पता है। Activity.finish() विधि Activity.finish() के रास्ते में कहीं भी कॉल करती है, और स्टैक से गतिविधि को भी हटाती है, और मुझे लगता है कि यह किसी भी तरह से ऑपरेटिंग सिस्टम और कचरा कलेक्टर को इंगित करता है कि वह "अपनी चाल" कर सकता है और मुफ्त स्मृति जब यह एक अच्छा समय ऐसा लगता है ....

मैं इस पोस्ट में आया - क्या एक आवेदन छोड़ दिया गया है? और मार्क मर्फी के जवाब को पढ़ें।

यह मुझे थोड़ा उलझन में डाल दिया कि वास्तव में क्या finish() विधि वास्तव में करता है।

क्या कोई मौका है जिसे मैं finish() करूंगा finish() और onDestroy() को नहीं बुलाया जाएगा?


@ user3282164 http://developer.android.com/reference/android/app/Activity.html जीवन चक्र के अनुसार इसे onStop() -> onStop() -> onStop() onDestroy() को कॉल finish() पर onDestroy() पर कॉल करना चाहिए।

चित्र प्रणाली के कारण [गतिविधि रनिंग] से [ onDestroy() ] तक कोई सीधा पथ नहीं दिखाता है।

onStop() दस्तावेज़ कहता है " ध्यान दें कि इस विधि को कभी भी कम स्मृति स्थितियों में नहीं कहा जा सकता है, जहां सिस्टम पर आपकी गतिविधि की प्रक्रिया को चालू रखने के लिए पर्याप्त स्मृति नहीं है () विधि कहा जाता है। "


@K_Anas उत्तर पर मेरे 2 सेंट। मैंने फिनिश () विधि पर एक साधारण परीक्षण किया। गतिविधि जीवन चक्र में महत्वपूर्ण कॉलबैक विधियों की सूची दी गई

  1. कॉलिंग फिनिश () पर क्रिएट (): ऑनक्रेट () -> ऑनडेस्ट्राय ()
  2. ऑनस्टार्ट () में कॉलिंग फिनिश (): ऑनक्रेट () -> ऑनस्टार्ट () -> ऑनस्टॉप () -> ऑनडेस्ट्राय ()
  3. कॉलिंग फिनिश () पर रेज़्यूम (): ऑनक्रेट () -> ऑनस्टार्ट () -> ऑन रीज़्यूम () -> ऑन पॉज़ () -> ऑनस्टॉप () -> ऑनडेस्ट्राय ()

मेरा कहना है कि बीच में किसी भी तरीके के साथ विधियों के समकक्षों को बुलाया जाता है जब खत्म () निष्पादित किया जाता है।

उदाहरण के लिए:

 onCreate() counter part is onDestroy()
 onStart() counter part is onStop()
 onPause() counter part is onResume()

ऑनक्रेट () पर कॉलिंग खत्म करने के लिए सीधे डेस्ट्रॉय () पर कॉल नहीं किया जाएगा क्योंकि @prakash ने कहा। finish() ऑपरेशन तब तक शुरू नहीं होगा जब तक आप एंड्रॉइड पर नियंत्रण वापस नहीं ले लेते।

कॉलिंग फिनिश () ऑनक्रेट (): ऑनक्रेट () -> ऑनस्टार्ट () -> ऑनर्यूम () । यदि उपयोगकर्ता ऐप से बाहर निकलता है तो कॉल करेगा -> पर रोकें () -> ऑनस्टॉप () -> onDestroy ()

ऑनस्टार्ट () में कॉलिंग फिनिश (): ऑनक्रेट () -> ऑनस्टार्ट () -> ऑनस्टॉप () -> ऑनडेस्ट्राय ()

कॉलिंग फिनिश () पर रेज़्यूम () : ऑनक्रेट () -> ऑनस्टार्ट () -> ऑन रीज़्यूम () -> ऑन पॉज़ () -> ऑनस्टॉप () -> ऑनडेस्ट्राय ()

आगे के संदर्भ के लिए खत्म होने के बारे में और खत्म होने के बाद इस निरंतर निरंतर देखें ()


किसी गतिविधि पर finish() को कॉल करते समय, onDestroy() पर विधि निष्पादित की जाती है यह विधि इस तरह की चीजें कर सकती है:

  1. गतिविधि का प्रबंधन करने वाले किसी भी संवाद को खारिज कर दें।
  2. गतिविधि का प्रबंधन कर रहे किसी भी कर्सर को बंद करें।
  3. किसी खुले खोज संवाद को बंद करें

इसके अलावा, onDestroy() एक विनाशक नहीं है। यह वास्तव में वस्तु को नष्ट नहीं करता है। यह सिर्फ एक विधि है जिसे एक निश्चित राज्य के आधार पर बुलाया जाता है। तो सुपरसास के onDestroy() रन और रिटर्न के बाद आपका उदाहरण अभी भी जिंदा और बहुत अच्छा है। उपयोगकर्ता ऐप को पुनरारंभ करना चाहता है, तो एंड्रॉइड प्रक्रियाओं को तब तक रखता है, इससे स्टार्टअप चरण तेज हो जाता है। प्रक्रिया कुछ भी नहीं करेगी और अगर स्मृति को पुनः प्राप्त करने की आवश्यकता है, तो प्रक्रिया को मार दिया जाएगा


मेरे अध्ययन से पता चलता है कि finish() विधि वास्तव में कतार में कुछ विनाश संचालन रखती है, लेकिन गतिविधि तुरंत नष्ट नहीं होती है। हालांकि विनाश निर्धारित है।

उदाहरण के लिए, यदि आप onActivityResult() कॉलबैक में finish() onActivityResult() , जबकि onResume() को अभी तक चलाना है, तो पहले onResume() निष्पादित किया जाएगा, और उसके बाद केवल onStop() और onStop() onDestroy() को कॉल किया जाएगा।

नोट: documentation पर बताए गए अनुसार, onDestroy() को बिल्कुल भी नहीं कहा जा सकता है।


यह भी ध्यान दें कि क्या आप किसी इरादे के बाद फिनिश () को कॉल करते हैं, तो आप "बैक" बटन के साथ पिछली गतिविधि पर वापस नहीं जा सकते हैं

startActivity(intent);
finish();

समाप्त () विधि वर्तमान गतिविधि को नष्ट कर देगा। जब आप उपयोगकर्ता को बैक बटन दबाते हैं तो आप इस विधि का उपयोग ऐसे मामलों में कर सकते हैं जब आप इस गतिविधि को बार-बार लोड नहीं करना चाहते हैं। असल में यह current ढेर से गतिविधि को साफ़ करता है।


onDestroy() अंतिम सफाई के लिए है - संसाधनों को मुक्त करना जो आप स्वयं कर सकते हैं, खुले कनेक्शन, पाठकों, लेखकों आदि को बंद कर सकते हैं। यदि आप इसे ओवरराइड नहीं करते हैं, तो सिस्टम जो करता है वह करता है।

दूसरी ओर, finish() बस सिस्टम को यह बताता है कि प्रोग्रामर वर्तमान Activity को समाप्त करना चाहता है। और इसलिए, इसके बाद यह onDestroy() पर कॉल करता है।

कुछ ध्यान दें:

यह जरूरी नहीं है कि केवल finish() करने के लिए एक कॉल finish() को onDestroy() कॉल ट्रिगर करता है। नहीं। जैसा कि हम जानते हैं, एंड्रॉइड सिस्टम गतिविधियों को मारने के लिए स्वतंत्र है अगर ऐसा लगता है कि मौजूदा Activity द्वारा आवश्यक संसाधन हैं जिन्हें मुक्त करने की आवश्यकता है।







application-lifecycle