Android में Activ.finish () कैसे काम करता है?


108

क्या कोई इस बात का विवरण दे सकता है कि Activityइसकी finish()विधि के दौरान क्या होता है ?

क्या यह तुरंत बाहर निकलता है, या यह उस फ़ंक्शन को पूरा करता है जिससे इसे बुलाया गया था?


जवाबों:


123

क्या यह तुरंत बाहर निकलता है या उस फ़ंक्शन को पूरा करता है जिससे इसे बुलाया गया था?

जिस विधि को कहा जाता है finish()वह पूरा होने तक चलेगी। finish()आपरेशन भी शुरू नहीं होगी जब तक आप Android के लिए नियंत्रण वापस जाएँ।


3
फिर एक गतिविधि को कैसे पूरा किया जाए जिसे StartAvtivityforResults () द्वारा पूरा किए बिना कहा जाता है?
आयुष पटेरिया

@CommonsWare हम कैसे सुनिश्चित कर सकते हैं कि onStop को हमेशा कहा जाता है? मेरे ऐप में OnStop और onDestroy को कुछ मामलों में नहीं बुलाया जाता है और उन मामलों में बच्चे की गतिविधि को पूरा करने में बहुत अधिक समय लगता है और ऐसा लगता है कि App ने फांसी लगा ली है ... जबकि जब onStop कहा जाता है तो सब कुछ सामान्य काम करता है। मैं एंड्रॉइड 2.3.6 के साथ गैलेक्सी वाई पर हूं ... मेरे सवाल पर stackoverflow.com/questions/13928591/… plz मदद देखें !!!
अमित

@CommonsWare मैंने श्रीमान को बहुत ही सच्चा परीक्षण दिया। + 1 आपके लिए लेकिन मैं एक प्रश्न पूछना चाहता हूं जिसे मैंने अपने कार्य में पहले कथन के रूप में लिखा है। तब यह पूरे कार्य को अंजाम दे रहा है और फिर समाप्त () कहा जाता है कि यह कैसे प्रबंधित किया गया।
निखिल अग्रवाल

@ निखिलअग्रवाल, आप अपने कार्य को ठीक होने के बाद वापस कर सकते हैं () कहा जाता है।
antonio081014

क्या onDestroy () को कॉल करने से पहले फिनिश () भी ऑनपॉज () और ऑनटॉप () को कॉल करता है?
sr09

20

की तरह हर जीवन चक्र घटना onCreate, onResume, onPause.... onDestroy"मुख्य धागा" - एक गतिविधि का हमेशा एक ही धागे पर कहा जाता है।

संक्षेप में यह धागा एक कतार द्वारा समर्थित है, जिसमें सभी गतिविधि कार्यक्रम पोस्ट किए जा रहे हैं। यह धागा प्रविष्टि के क्रम में इन सभी घटनाओं को निष्पादित कर सकता है।

यदि आप finish()जीवन चक्र कॉलबैक में से एक में कॉल कर रहे हैं onCreate()... जैसे "कतार" संदेश इस कतार में जुड़ जाएगा, लेकिन थ्रेड को "फिनिश" क्रिया को लेने और निष्पादित करने के लिए स्वतंत्र नहीं है, जब तक कि वर्तमान में विधि रिटर्न निष्पादित नहीं किया जाता है अर्थात थ्रेड से मुक्त कर दिया जाता है। तत्कालीन कार्य।


13

ondestroy() आपकी गतिविधि नष्ट होने से पहले आपको मिलने वाली अंतिम कॉल है।

यह या तो हो सकता है क्योंकि गतिविधि खत्म हो रही है (किसी ने उस finish() पर कॉल किया, या क्योंकि सिस्टम अंतरिक्ष को बचाने के लिए अस्थायी रूप से इस उदाहरण को नष्ट कर रहा है। आप isFinishing() विधि के साथ इन दो परिदृश्यों के बीच अंतर कर सकते हैं ।


1

यदि ए और बी दो गतिविधियाँ हैं और आपका प्रवाह ए> बी से जा रहा है; और बी = एक कॉल finish()

फिर,

वह विधि जहां से आपको बुलाया finish()गया है, जैसा कि मार्क ने उल्लेख किया है, निष्पादित करेगा। और कॉलबैक का प्रवाह निम्नानुसार होगा -

  1. onPause() का activity A
  2. onRestart()> onStart()> onResume()गतिविधि बी के
  3. फिर, असली अंतर आता है। यदि आप फोन नहीं किया finish()से activity A; केवल onStop()के Activity Aयहाँ बुलाया जाएगा। जबकि, इस मामले में, हम कहाँ finish()से बुलाए Activity A; इसलिए onStop()और onDestroy()दोनों को बुलाया जाएगा activity A
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.