एंड्रॉइड गतिविधि जीवन चक्र - इन सभी तरीकों के लिए क्या हैं?


419

एंड्रॉइड गतिविधि का जीवन चक्र क्या है? क्यों इतने सारे समान लग विधियों (कर रहे हैं onCreate(), onStart(), onResume()) आरंभीकरण के दौरान कहा जाता है, और इसलिए कई अन्य ( onPause(), onStop(), onDestroy()) अंत में कहा जाता है?

इन तरीकों को कब कहा जाता है, और उनका सही तरीके से उपयोग कैसे किया जाना चाहिए?


17
यह सवाल इतनी बार क्यों उठाया गया है? इसे बंद क्यों नहीं किया गया?
अलेक्जेंडर कुलाख़्तिन

54
क्यों बहुत सारे अपवित्रों के साथ एक प्रश्न को बंद करें? Stackoverflow की एक बुरी आदत है।
डिक लुकास

12
यह एक विकी शैली का प्रश्न है और मुझे लगता है कि इसे साइट पर अनुमति दी जानी चाहिए।
मतीन उल्हाक 22

2
@ अलेक्जेंडर कुलाखतिन - इस सवाल को बंद क्यों करें? इसके बजाय आपको अपना खाता बंद कर देना चाहिए यदि आप उस जानकारी को पचा नहीं पाते हैं जो नए एंड्रॉइड लोगों के लिए उत्तर में दी गई है। यह सवाल ज्ञान से भरा है और मैं इस सवाल को वोट देने जा रहा हूं।
स्टैक ओवरफ्लो

कब इन तरीकों को प्रश्न कहा जाता है, आपने क्या प्रयास किया है?
श्रीकांत करुमनघाट

जवाबों:


748

इसे गतिविधि जीवनचक्र (Android डेवलपर्स पर) में देखें।

यहां छवि विवरण दर्ज करें

onCreate () :

गतिविधि पहली बार होने पर बुलाया गया। यह वह जगह है जहां आपको अपने सभी सामान्य स्थिर सेट अप करना चाहिए: दृश्य बनाएं, सूचियों के लिए डेटा को बांधें, आदि यह पद्धति आपको एक बंडल प्रदान करती है जिसमें गतिविधि पहले से जमे हुए राज्य होती है, अगर कोई था। हमेशा onStart () द्वारा अनुसरण किया जाता है।

OnRestart () :

आपकी गतिविधि को रोकने के बाद कॉल किया गया था, इसे फिर से शुरू करने से पहले। हमेशा के बाद onStart ()

ऑनस्टार्ट () :

कॉल किया जाता है जब गतिविधि उपयोगकर्ता के लिए दृश्यमान हो रही है। यदि गतिविधि अग्रभूमि में आती है, तो onResume () द्वारा अनुसरण किया जाता है।

onResume () :

कॉल किया जाता है जब गतिविधि उपयोगकर्ता के साथ बातचीत करना शुरू कर देगी। इस बिंदु पर आपकी गतिविधि गतिविधि स्टैक के शीर्ष पर होती है, जिसमें उपयोगकर्ता इनपुट उसके पास जाता है। हमेशा onPause () के बाद।

ऑनपॉज () :

गतिविधि जीवनचक्र के भाग के रूप में कहा जाता है जब कोई गतिविधि पृष्ठभूमि में जा रही है, लेकिन अभी तक नहीं मारा गया है। OnResume () के लिए समकक्ष। जब गतिविधि B को गतिविधि A के सामने लॉन्च किया जाता है, तो यह कॉलबैक A. B पर लागू किया जाएगा, जब तक A का ऑनपॉज़ () रिटर्न नहीं आएगा, तब तक यहाँ कुछ भी लंबा नहीं करना सुनिश्चित करें।

onStop () :

जब आप उपयोगकर्ता को दिखाई नहीं देते हैं तो कॉल किया जाता है। आपको बाद में उपयोगकर्ता गतिविधि के आधार पर या तो onRestart (), onDestroy (), या कुछ भी प्राप्त नहीं होगा। ध्यान दें कि इस विधि को कभी भी नहीं बुलाया जा सकता है, कम स्मृति स्थितियों में जहां सिस्टम में पर्याप्त मेमोरी नहीं होती है ताकि आपकी गतिविधि की प्रक्रिया को चालू रखने के बाद चालू हो।

onDestroy () :

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

जब गतिविधि पहली बार लोड होती है तो घटनाओं को नीचे कहा जाता है:

onCreate()
onStart()
onResume()

जब आप फोन बटन पर क्लिक करते हैं तो गतिविधि पृष्ठभूमि पर जाती है और नीचे की घटनाओं को बुलाया जाता है:

onPause()
onStop()

फ़ोन डायलर से बाहर निकलें और नीचे की घटनाओं को बुलाया जाएगा:

onRestart()
onStart()
onResume()

जब आप बैक बटन पर क्लिक करते हैं या समाप्त करने की कोशिश करते हैं () घटनाओं को नीचे दी गई गतिविधि कहा जाता है:

onPause()
onStop()
onDestroy()

गतिविधि राज्यों

Android OS डिवाइस पर चलने वाली गतिविधियों के प्रबंधन में सहायता के लिए एक प्राथमिकता कतार का उपयोग करता है। राज्य के आधार पर एक विशेष एंड्रॉइड गतिविधि होती है, इसे ओएस के भीतर एक निश्चित प्राथमिकता दी जाएगी। यह प्राथमिकता प्रणाली एंड्रॉइड की गतिविधियों को पहचानने में मदद करती है जो अब उपयोग में नहीं हैं, ओएस को स्मृति और संसाधनों को पुनः प्राप्त करने की अनुमति देता है। निम्नलिखित आरेख में दर्शाया गया है कि राज्य अपने जीवनकाल के दौरान किन गतिविधियों से गुजर सकते हैं:

इन राज्यों को तीन मुख्य समूहों में विभाजित किया जा सकता है:

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

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

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

* जीवन चक्र को समझने के लिए नमूना गतिविधि **

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
    String tag = "LifeCycleEvents";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Log.d(tag, "In the onCreate() event");
    }
    public void onStart()
    {
       super.onStart();
       Log.d(tag, "In the onStart() event");
    }
    public void onRestart()
    {
       super.onRestart();
       Log.d(tag, "In the onRestart() event");
    }
    public void onResume()
    {
       super.onResume();
       Log.d(tag, "In the onResume() event");
    }
    public void onPause()
    {
       super.onPause();
       Log.d(tag, "In the onPause() event");
    }
    public void onStop()
    {
       super.onStop();
       Log.d(tag, "In the onStop() event");
    }
    public void onDestroy()
    {
       super.onDestroy();
       Log.d(tag, "In the onDestroy() event");
    }
}

1
तो अगर मैं इसे सही ढंग से समझ गया onStop () को हमेशा onPause () के बाद कहा जाता है?
तैत्तान डी बैलेउल

4
हमेशा नहीं, "onStop (): जब आप उपयोगकर्ता को दिखाई नहीं देते हैं, तो कॉल किया जाता है"
येकब अहमद

2
वहाँ किसी भी मौका है कि onCreate से पहले कहा जाता है द्वारा कुछ भी है?
नोडोडैड

6
हाँ वहाँ है - डिफ़ॉल्ट कंस्ट्रक्टर (यह कोई पैरामीटर नहीं है)। लेकिन इसका बहुत ही प्रारंभिक आरंभिक उद्देश्यों के लिए बहुत सीमित उपयोग है। आमतौर पर आपको इसका उपयोग नहीं करना चाहिए जब तक आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं। और फिर भी आपको दो बार सोचना चाहिए कि क्या चीजें करने का एक बेहतर तरीका है।
मोजेल्निर

1
मुझे लगता है कि यह लिंक आपको गतिविधि के जीवनचक्र को बेहतर तरीके से समझने में मदद कर सकता है। iphtechnologies.com/understanding-lifecycle-in-android-activity
आशीष कुमार मिश्रा

162

गतिविधि में छह राज्य हैं

  • बनाया था
  • शुरू कर दिया है
  • फिर से शुरू
  • रोके गए
  • रोका हुआ
  • नष्ट हो गए

गतिविधि जीवनचक्र की सात विधियाँ हैं

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onRestart()
  • onDestroy()

गतिविधि जीवन चक्र

हालात

  • जब एप्लिकेशन खोलें

    onCreate() --> onStart() -->  onResume()
  • जब बैक बटन दबाया और ऐप से बाहर निकलें

    onPaused() -- > onStop() --> onDestory()
  • जब होम बटन दबाया

    onPaused() --> onStop()
  • होम बटन दबाए जाने के बाद जब हालिया कार्य सूची से फिर से ऐप खोलें या आइकन पर क्लिक करें

    onRestart() --> onStart() --> onResume()
  • जब नोटिफिकेशन बार या ओपन सेटिंग्स से किसी अन्य ऐप को खोलें

    onPaused() --> onStop()
  • किसी अन्य ऐप या सेटिंग से दबाया गया बैक बटन हमारे ऐप को देख सकता है

    onRestart() --> onStart() --> onResume()
  • जब कोई भी डायलॉग स्क्रीन पर खुलता है

    onPause()
  • डायलॉग से संवाद या बैक बटन को खारिज करने के बाद

    onResume()
  • ऐप में कोई भी फोन बज रहा है और उपयोगकर्ता है

    onPause() --> onResume() 
  • जब उपयोगकर्ता ने फोन का उत्तर बटन दबाया

    onPause()
  • कॉल एंड के बाद

    onResume()
  • जब फोन स्क्रीन बंद

    onPaused() --> onStop()
  • जब स्क्रीन को वापस चालू किया जाता है

    onRestart() --> onStart() --> onResume()

6
'जब कोई भी डायलॉग ऑन स्क्रीन खुलता है, ऑनपॉज () कहलाता है', एक अल्ट्रॉडियलॉग के लिए सही नहीं है। यह तभी कहा जाता है जब संवाद स्वयं एक संवाद गतिविधि हो (जिसमें थीम @android: style / Theme.Dialog पर सेट हो)।
गौरव जैन

2
मूल्यवान उत्तर। उनके प्रलेखन में जोड़ने के लिए इसे Google पर सबमिट करें। मैं रखने के लिए एक वर्ड दस्तावेज़ के लिए अपना जवाब बचा रहा हूँ!
1

मुझे समझ में नहीं आया "कोई भी फोन बज रहा है और ऐप में यूजर है"। वास्तव में परिदृश्य क्या है? मेरा पहला हालांकि अगर उपयोगकर्ता ऐप में था और फोन बजना शुरू हो जाता है तो पूर्ण स्क्रीन कॉल हो जाने की स्थिति में onPause () -> onStop () होगा। हेड-अप इनकमिंग कॉल मैसेज के लिए सिर्फ OnResume -> onPause () हो सकता है, लेकिन मुझे इस पर यकीन नहीं है। ऑन कॉल के लिए कॉल में क्या स्थिति है -> onResume? कॉल के अंत में है?
सोती

यह वही है जिसे मैं देख रहा था। बस मैं जानना चाहता था कि मुझे अपना एपीआई कॉल कहां करना चाहिए।
हाइजनबर्ग

मुझे आपका परिदृश्य आधारित उत्तर पसंद आया ।
कोकाबी

155

संपूर्ण भ्रम तब होता है जब Google ने कुछ के बजाय गैर-सहज नामों को चुना है:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change] 

गतिविधि आरेख की व्याख्या इस प्रकार की जा सकती है:

यहां छवि विवरण दर्ज करें


1
निर्भर करता है। जब तक यह भ्रम को हल नहीं करता, तब तक एक लंबा नाम चोट नहीं पहुंचाएगा। उदाहरण: onRoutePresentationDisplayChanged () Android SDK के अंदर से बहुत अधिक कार्य है
नीलेश पवार

12
मुझे व्यक्तिगत रूप से आपके नाम बहुत अधिक सहज नहीं लगते हैं, प्लस फ्रैगमेंट के साथ, यह वास्तव में सहसंबंधित नहीं है।
मार्टिन मार्कोसिनी

9
Upvoted। आधिकारिक दस्तावेज की तुलना में अधिक उपयोगी
bad_keypoint

3
यह एक महान पोस्ट है। एक समस्या। जब आप एंड्रॉइड लाइफसाइकल विधियों को Google में टाइप करते हैं, तो यह छवि Android जीवन चक्र विधियों के उत्तर के रूप में खोज विकल्प (छवि खोज मोड में भी नहीं) के ऊपर आती है। अनजान (या आप इसे कैसे देखते हैं इसके आधार पर आलसी) आसानी से गुमराह हो सकते हैं जब तक कि वे फ़्लोचार्ट छवि (आपकी छवि) पर क्लिक करने के बजाय स्टैकऑवरफ़्लो लिंक का पालन न करें।
एंड्रयू एस

1
हाँ। यह वही है जिसकी मुझे तलाश है। किसी को इस तरह से सामान के साथ एक किताब (या एक डॉक्टर?) लिखना चाहिए। onResume आदि का कोई मतलब नहीं है।
हर्ष कांचीना

22

एंड्रॉइड जीवन चक्र

एंड्रॉइड एप्लिकेशन के जीवन चक्र को प्रबंधित करने वाले सात तरीके हैं:


इन सभी विधियों के लिए उत्तर दें:

आइए हम एक सरल परिदृश्य लेते हैं, जहां इन विधियों को किस क्रम में कहा जाता है, यह जानने में मदद मिलेगी कि वे क्यों उपयोग किए जाते हैं।

  • मान लीजिए आप एक कैलकुलेटर ऐप का उपयोग कर रहे हैं। ऐप को शुरू करने के लिए उत्तराधिकार में तीन तरीके कहे जाते हैं।

onCreate() - - -> - - ->onStart() onResume()

  • जब मैं कैलकुलेटर ऐप का उपयोग कर रहा हूं, तो अचानक एक कॉल आता है। कैलकुलेटर गतिविधि पृष्ठभूमि में जाती है और दूसरी गतिविधि कहती है। कॉल से निपटना अग्रभूमि में आता है, और अब दो तरीकों को उत्तराधिकार में कहा जाता है।

onPause() - - -> onStop()

  • अब कहते हैं कि मैं फोन पर बातचीत समाप्त करता हूं, पृष्ठभूमि से कैलकुलेटर गतिविधि अग्रभूमि में आती है, इसलिए उत्तराधिकार में तीन तरीकों को कहा जाता है।

onRestart() - - -> - - ->onStart() onResume()

  • अंत में, मान लें कि मैंने कैलकुलेटर एप्लिकेशन में सभी कार्य समाप्त कर लिए हैं, और मैं ऐप से बाहर निकलना चाहता हूं। उत्तराधिकार में फ्यूचर दो विधियों को कहा जाता है।

onStop() - - -> onDestroy()


वहाँ चार राज्यों में एक गतिविधि संभवतः मौजूद हो सकती है:

  • आरंभिक राज्य
  • चल रहा राज्य
  • रुका हुआ राज्य
  • रोका हुआ राज्य

प्रारंभिक अवस्था में शामिल हैं:

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

रनिंग स्टेट में शामिल हैं:

यह गतिविधि (स्थिति) है जो वर्तमान में स्क्रीन पर है। यह राज्य अकेले स्क्रीन पर टाइपिंग, और बटन को छूने और क्लिक करने जैसी चीजों को संभालता है।

रोका गया राज्य शामिल है:

जब कोई गतिविधि अग्रभूमि में नहीं होती है और इसके बजाय यह पृष्ठभूमि में होती है, तो गतिविधि को रुकी हुई स्थिति में कहा जाता है।

बंद राज्य में शामिल हैं:

एक रुकी हुई गतिविधि को केवल पुनः आरंभ करके अग्रभूमि में खरीदा जा सकता है और साथ ही इसे किसी भी समय नष्ट किया जा सकता है।

गतिविधि प्रबंधक इन सभी राज्यों को इस तरह से संभालता है कि उपयोगकर्ता का अनुभव और प्रदर्शन हमेशा उन परिदृश्यों में भी सबसे बेहतर होता है जहां नई गतिविधि को मौजूदा गतिविधियों में जोड़ा जाता है।


onPume पर onPause के लिए कोई उदाहरण ?
ज़ेलेली

14

मुझे यह प्रश्न और इसके उत्तर पसंद हैं, लेकिन अभी तक onPostCreate () या onPostResume () जैसे कम अक्सर उपयोग किए जाने वाले कॉलबैक का कवरेज नहीं है । स्टीव पोमेरॉय ने https://github.com/xxv/android-lifecycle पर इन सहित एक आरेख का प्रयास किया है और वे एंड्रॉइड के फ्रैगमेंट जीवन चक्र से कैसे संबंधित हैं । मैंने केवल गतिविधि भाग को शामिल करने के लिए स्टीव के बड़े आरेख को संशोधित किया और इसे पत्र आकार एक-पृष्ठ प्रिंटआउट के लिए स्वरूपित किया। मैंने इसे https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf पर एक पाठ पीडीएफ के रूप में पोस्ट किया है और नीचे इसकी छवि है:

Android गतिविधि जीवनचक्र


8

Android डेवलपर्स पेज से,

onPause ():

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

onStop ():

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

अब मान लें कि तीन गतिविधियाँ हैं और आप A से B तक जाते हैं, तो A के ऑनपोज को अब B से C तक कहा जाएगा, फिर B के ऑनपोज़ और A के ऑनस्पॉट को बुलाया जाएगा।

रुकी हुई गतिविधि को फिर से शुरू किया जाता है और स्टॉप को फिर से शुरू किया जाता है।

जब तुमने फोन किया this.finish() , onPause-onStop-onDestroy कहा जाएगा। याद रखने वाली मुख्य बात यह है: रुकी हुई गतिविधियाँ रोक दी जाती हैं और जब भी Android को अन्य कार्यों के लिए स्मृति की आवश्यकता होती है, तब एक रुकी हुई गतिविधि नष्ट हो जाती है।

मुझे उम्मीद है कि यह पर्याप्त स्पष्ट है।


क्या हम ऑन-पोज़ विधि को एक मध्यवर्ती चरण के रूप में समाप्त कर सकते हैं, जो गतिविधि के बीच में केंद्रित है और यह अंत में उपयोगकर्ता और ऑनस्टॉप पद्धति के लिए अदृश्य हो जाता है, जब गतिविधि उपयोगकर्ता के लिए पूरी तरह से अदृश्य हो जाती है
नव

मुझे लगता है कि ऐसा होना चाहिए।
मासीर

3
@ मान लीजिए कि 3 गतिविधियां हैं और आप ए से बी तक जाते हैं, तो ए के ऑनपोज को अब बी से सी पर और फिर बी के ऑनपोज और ए के ऑनटॉप को बुलाया जाएगा।
MKJParekh

3

अत्यधिक मूल्यांकित उत्तर के शीर्ष पर कुछ और जानकारी जोड़ना (किलबेल के अतिरिक्त खंड और विधियों के अगले सेट, जिन्हें जीवन चक्र कहा जा रहा है):

स्रोत: developer.android.com

यहां छवि विवरण दर्ज करें

ध्यान दें " किलकारीउपरोक्त तालिका में " कॉलम को - उन तरीकों के लिए जिन्हें मारने योग्य होने के रूप में चिह्नित किया गया है, उस पद्धति के बाद प्रक्रिया को होस्ट करने वाली प्रक्रिया किसी भी समय सिस्टम द्वारा अपने कोड को निष्पादित किए बिना किसी भी समय मारा जा सकता है।

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

ध्यान दें कि इसके onPause()बजाय लगातार डेटा को सहेजना महत्वपूर्ण है onSaveInstanceState(Bundle)क्योंकि उत्तरार्द्ध जीवनचक्र कॉलबैक का हिस्सा नहीं है, इसलिए इसे हर स्थिति में नहीं बुलाया जाएगा जैसा कि इसके प्रलेखन में वर्णित है।

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

onPostCreate(Bundle savedInstanceState)

कहा जाता है जब गतिविधि स्टार्ट-अप पूरा हो गया है (के बाद onStart()और onRestoreInstanceState(Bundle)बुलाया गया है)।

onPostResume()

गतिविधि फिर से शुरू होने पर ( onResume()जिसे कॉल किया गया है) पूरा होने पर कॉल किया जाता है।

onSaveInstanceState(Bundle outState)

मारे जाने से पहले एक गतिविधि से प्रति-आवृत्ति राज्य को पुनः प्राप्त करने के लिए कहा जाता है ताकि राज्य को फिर से बहाल किया जा सके onCreate(Bundle)या onRestoreInstanceState(Bundle)(इस विधि द्वारा आबाद बंडल दोनों को पारित किया जाएगा)।

onRestoreInstanceState(Bundle savedInstanceState)

इस पद्धति को onStart()उस समय के बाद कहा जाता है जब गतिविधि को पहले से सहेजे गए राज्य से पुनः आरंभ किया जा रहा हो, यहां दिया गया हो savedInstanceState

इन सभी विधियों का उपयोग करके मेरा आवेदन कोड:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText txtUserName;
    private EditText txtPassword;
    Button  loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Ravi","Main OnCreate");
        txtUserName=(EditText) findViewById(R.id.username);
        txtPassword=(EditText) findViewById(R.id.password);
        loginButton =  (Button)  findViewById(R.id.login);
        loginButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        Log.d("Ravi", "Login processing initiated");
        Intent intent = new Intent(this,LoginActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("userName",txtUserName.getText().toString());
        bundle.putString("password",txtPassword.getText().toString());
        intent.putExtras(bundle);
        startActivityForResult(intent,1);
       // IntentFilter
    }
    public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
        Log.d("Ravi back result:", "start");
        String result = resIntent.getStringExtra("result");
        Log.d("Ravi back result:", result);
        TextView txtView = (TextView)findViewById(R.id.txtView);
        txtView.setText(result);

        Intent sendIntent = new Intent();
        //sendIntent.setPackage("com.whatsapp");
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
        sendIntent.setType("text/plain");
        startActivity(sendIntent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("Ravi","Main Start");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("Ravi","Main ReStart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("Ravi","Main Pause");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("Ravi","Main Resume");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("Ravi","Main Stop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("Ravi","Main OnDestroy");
    }

    @Override
    public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onPostCreate(savedInstanceState, persistentState);
        Log.d("Ravi","Main onPostCreate");
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        Log.d("Ravi","Main PostResume");
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }
}

लॉगिन गतिविधि:

public class LoginActivity extends AppCompatActivity {

    private TextView txtView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        txtView = (TextView) findViewById(R.id.Result);
        Log.d("Ravi","Login OnCreate");
        Bundle bundle = getIntent().getExtras();
        txtView.setText(bundle.getString("userName")+":"+bundle.getString("password"));
        //Intent  intent = new Intent(this,MainActivity.class);
        Intent  intent = new Intent();
        intent.putExtra("result","Success");
        setResult(1,intent);
       // finish();
    }
}

आउटपुट: (विराम से पहले)

D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

आउटपुट: (पॉज़ से फिर से शुरू होने के बाद)

D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

ध्यान दें कि onPostResume()भले ही इसे जीवन चक्र विधि के रूप में उद्धृत नहीं किया गया हो।


0

मैं ऊपर दिए गए उत्तर के अनुसार कुछ लॉग चलाता हूं और यहां आउटपुट है:

गतिविधि शुरू करना

On Activity Load (First Time)
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

Reload After BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

गतिविधि को रोकना

On BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 
D/IndividualChatActivity: onDestroy: 

OnMinimize (Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

OnMinimize (Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

Going To Another Activity
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 

Close The App
————————————————————————————————————————————————
D/IndividualChatActivity: onDestroy: 

मेरी व्यक्तिगत राय में केवल दो को ऑनस्टार्ट और ऑनटॉप की आवश्यकता है।

onResume वापस पाने के हर उदाहरण में लगता है, और छोड़ने के हर उदाहरण में (ऐप को बंद करने के अलावा)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.