Activity Lifecycle Methods – जैसाकि पिछले Section में हमने जाना कि किसी Activity की Lifecycle की विभिन्न States से Associated कुछ Events होते हैं, जो कुछ Specific Methods को Invoke करते हैं और हमें इन्हीं Methods को अपनी Activity की Java Class File में Override करना होता है। इस Section में हम Activity की Lifecycle से सम्बंधित इन्हीं Methods को थोड़ा विस्तार से समझने की कोशिश करेंगे।
एक Android Activity किसी भी Android Application का एक Self-Standing यानी अपने आप में एक पूर्ण Component होता है, जो User अथवा System द्वारा Trigger किए गए Events के आधार पर Start, Stop, Pause, Restart या Reclaim हो सकता है और प्रत्येक स्थिति को Control व Handle करने के लिए एक निश्चित Method Allocate किया गया है।
चलिए, इन Methods के बारे में थोड़ा विस्तार से जानते हैं और समझने की कोशिश करते हैं कि ये किस तरह से हमारे Android App की Activity की Lifecycle को Control व Handle करने में सहयोगी होते हैं।
Void onCreate(Bundle savedInstanceState) Method
किसी भी Android App के Lifecycle की शुरूआत इसी Method से होती है। इस Method में हमें हमारी Activity के साथ Associated Layout File Load करना होता है। साथ ही अपनी Current Activity के लिए जितने भी Variables, Objects आदि की जरूरत होती है, उन सभी का Initialization भी हमें इसी Method में करना होता है, जबकि Objects, Variables आदि के Declaration का काम सामान्यत: Class Level पर किया जाता है, ताकि Current Activity के अन्य Methods भी जरूरत होने पर एक-दूसरे के Data को Access and Manipulate कर सकें।
साथ ही हम हमारी Current Activity में जितने भी Methods को Override क्रते हैं, उन सभी में First Statement के रूप में उनके Parent Class के Constructor को super.parentConstructor() Statement के रूप में Compulsory रूप से Invoke करते हैं। जैसे-
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // "Other codes" }
जब onCreate() Method Call होता है, तब उससे सम्बंधित Activity निम्नानुसार 3 में से किसी एक स्थिति में किसी एक स्थिति में हो सकता है:
- वह किसी Start होने वाले Brand-New Android App का Main Activity हो सकता है, जो कि अपने Lifecycle की शुरूआत करने जा रहा हो।
- वह किसी Configuration Change जैसे कि Device Rotate करने पर Orientation Change होने के कारण अथवा किसी अन्य कारण से App के Restart होने की वजह से फिर से अपनी Lifecycle की शुरूआत करने जा रहा हो सकता है।
- वह किसी Low Memory जैसी Error के कारण Shutdown होने के बाद फिर से Restart होने वाले App का Activity हो सकता है।
इसलिए जब कोई App Create करते हैं, तब इन सभी बातों को ध्यान में रखना जरूरी होता है ताकि सभी तरह की स्थितियों को Handle करने से सम्बंधित Java Codes को onCreate() Method में लिखा जा सके।
अब हम इस Method में Parameter की तरह Anonymously Create होने वाले Reference savedInstanceBundle को समझ सकते हैं, जिसमें Current Activity की States Saved रहते हैं। यानी हम इस Bundle Instance का उपयोग Current Activity की Previous State जानने के लिए कर सकते हैं।
Android System द्वारा इस Bundle Instance का उपयोग Current Activity की States को उस स्थिति में Save क्रने के लिए किया गया हो सकता है, जब Android Device के Orientation Change के कारण Configuration में कोई परिवर्तन हुआ हो या Low Memory के कारण Current Android App Activity Restart हो गया हो। इस Bundle Instance में Activity के Restart होने से पहले जो Previous States Saved हुई होती हैं, उसे Activity की Instance State के नाम से जाना जाता है।
Instance State मूलत: Temporary ही होता है क्योंकि ये Current Android Application के साथ ही Tied रहता है इसलिए इसे Secondary Storage के रूप में Permanent File की तरह Save नहीं किया जाता क्योंकि जितनी बार भी वह Android App Start होता है, User हर बार उस Android App की पिछली State को ही Reload करना नहीं चाहे, ऐसा जरूरी नहीं होता।
हालांकि onPause() Method को Override करते समय हम हमारे Current Android Application की States को Long Term के लिए Persisted (यथास्थिति) रखना चाहते हैं। इसलिए जब onPause() Method को Override करते हैं, तब हम onCreate() Method के माध्यम से उस Saved States को फिर से Restore कर सकते हैं क्योंकि जैसे ही Android App Restart होता है, onCreate() Method Execute होता है और savedInstanceBundle Reference के माध्यम से Current Android App को उसकी Previous Instance State से Restore कर देता है।
यहां एक और स्थिति के बारे में थोड़ा विस्तार से समझना जरूरी है कि जब Android Device के Orientation Change करने की वजह से Android App Restart या Re-Create होता है, तो उस स्थिति में पिछला Activity पूरी तरह से Destroy हो जाता है इसलिए उससे सम्बंधित सभी Instance States भी पूरी तरह से समाप्त हो जाते हैं।
फलस्वरूप जब वही Android App फिर से Start होता है, तो पिछली States से सम्बंधित Restore करने के लिए कुछ भी नहीं होता क्योंकि उसी Android Application का जो नया Activity Create होता है वह एक Brand New Activity होता है, जिसका स्वयं का एक नया Memory Reference होता है और इस नई Activity की States का पिछली Activity की States से कोई सम्बंध नहीं रहता। इस स्थिति में किसी External Thread या Global Reference जो कि पिछली Activity द्वारा Create या Maintain किया गया हो, किसी भी तरह से Newly Created Activity से Connected नहीं होता, परिणामस्वरूप उन्हें Current Activity में किसी भी तरह से Use नहीं किया जा सकता।
इसलिए एक ऐसी व्यवस्था की जरूरत होती है, जिससे Application के Restart होने के बाद जो नई Activity Re-Create हुई है, उसे ये बताया जा सके कि पिछली Activity द्वारा Created या Maintained External Objects का Reference क्या है। नई Create होने वाली Activity के लिए पिछली Activity द्वारा Created Global Objects के References को “Non-Configuration Instance Reference” कहा जाता है और onRetainNonConfigurationInstance() नाम के Method द्वारा इन External Objects को Reference किया जा सकता है। फिर Android SDK इन References को getLastNonConfigurationInstance() नाम के Method द्वारा उस नई Activity को उपलब्ध करवाता है। या जा सके कि वही वो Activity है, त
onCreate() Method के साथ एक और स्थिति ये होती है कि हमें इस बात के लिए निश्चित होना होता है कि जब Current Activity की States Save हों, तब Views व Fragments वही होने चाहिए, जो Android App के Restart होने पर Create होने वाली Activity के onCreate() Method में Specified हों। क्योंकि onStart() Method के Execute होने के बाद onRestoreInstanceState() Method Execute होता है जो ये मानता है कि जिन Views व Fragments को Restore करना है, वे सभी हमारे Android App की Hierarchy में पहले से मौजूद हैं और यदि Hierarchy से कोई भी View या Fragment Missing होता है, तो वे फिर से Recreate नहीं होते। इसलिए कोई भी Android App Restart होने के बाद फिर से ठीक से Restore हो, ये केवल तभी सम्भव है, जबकि इस onCreate() Method से उपयुक्त Layout Views को Load किया गया हो।
void onStart() Method
किसी Android App की Main Activity के Create हो जाने का मतलब ये नहीं है कि वह User के सामने Visible भी हो जाएगा। वास्तव में onCreate() Method केवल Main Activity को Memory में Create करता है, उसे User के सामने Visible करने का काम onStart() Method द्वारा किया जाता है। अन्य शब्दों में कहें तो ये Method ही किसी भी Android App के किसी Activity की “Visible Life Cycle” को शुरू करता है।
ये Method ये मानता है कि onCreate() Method ने Activity से सम्बंधित View Hierarchy को पूरी तरह से Create करके Memory में Load कर दिया है जो कि User के सामने Display होने के लिए पूरी तरह से तैयार है।
इस Method की एक विशेषता ये भी है कि हम हमारी जरूरत के अनुसार इस Method को onRestart() Method के माध्यम से Manually भी Invoke कर सकते हैं।
एक ध्यान रखने वाली विषेश बात ये भी है कि onRestoreInstanceState() Method हमेंशा onStart() Method के Invoke होने के बाद Execute होता है। इसलिए इस Method में कभी ये नहीं मानना चाहिए कि Activity से सम्बंधित View Hierarchy के Controls अपनी Previous State से Restore हो चुके हैं। क्योंकि Restoration का काम इस Method के Execution के बाद होता है और पूरी तरह से Restored State वाला View Hierarchy, onResume() Method में प्राप्त होता है।
इसलिए View Hierarchy यानी Visible होने वाले Visual Controls के Previous State से Restore होने के बाद उनके साथ जो भी Operations Perform करने हों, उससे सम्बंधित Program Codes कभी भी onStart() Method में नहीं लिखने चाहिए, बल्कि उन्हें onResume() अथवा onRestoreInstanceState() Method में ही Specify करना चाहिए।
इस Method को तब भी Invoke किया जा सकता है, जब Activity किसी अन्य Activity की वजह से Hidden होने के बाद फिर से Show होना शुरू हो। उस स्थिति में ये Method, onRestart() Method के बाद Call होता है, जो कि स्वयं onStop() Method के बाद Call होता है। इसलिए इस Method के Execute होने के दो रास्ते होते हैं। पहला, ये onCreate() के बाद Call होता है और दूसरा ये onRestart() के बाद Call होता है और दोनों ही स्थितियों में ये माना जाता है कि Activity की View Hierarchy पहले से ही Established हो।
void onRestoreInstanceState(Bundle savedInstanceState)
यदि किसी Activity को User द्वारा ही Close किया गया है, तो उस स्थिति में यही समझा जाता है कि उस Activity की Current Instance States को User स्वयं ही Saved रखना नहीं चाहता।
उदाहरण के लिए यदि User Android Device के Back Button को Press करता है, तो इसका सीधा सा मतलब यही है कि वह Android Device को इस बात का Instruction दे रहा है कि वह अब उस Activity में Interested नहीं है और उसे उसकी सभी Unsaved States को Discard करते हुए पूरी तरह से Close कर दिया जाए।
इसलिए Current Activity की वे सभी States जो कि अभी Saved नहीं हुई हैं और केवल तभी तक Valid हैं, जब तक कि Current Activity अपनी Lifecycle के दौरान Memory में Exist है, States की इसी स्थिति को Instance State के नाम से जाना जाता है।
User द्वारा Android Device के Orientation Change करने के कारण यदि Underlying Android System को ऐसा लगता है कि उस Android App को Close कर दिया जाना चाहिए, तो उस स्थिति में Android System, उस Android App की Activity से सम्बंधित Instance State को उस स्थिति में ले आता है, जिसमें वह Android App Restart होने पर होता है और ऐसा करने के लिए Android System, onRestoreInstanceState() Method को Invoke करता है और Parameter के रूप में एक Bundle Type का savedInstanceState Reference Pass करता है, जिसमें Current Activity से सम्बंधित Instance State होता है।
Instance State के अलावा किसी Activity की Persistent State वह स्थिति होती है, जिसे User तब भी Expect करता है, जब Activity Finish हो चुका होता है। यानी किसी Activity के विभिन्न Visual Controls व उनके Contents को User उस स्थिति में भी वैसा ही चाहता है, जबकि वह उस Android App को पूरी तरह से Close करके फिर से Reopen करे, तो View Hierarchy की इस स्थिति को Persistent State के नाम से जाना जाता है।
Persistent State वह स्थिति है, जिसे Current Activity Lifecycle के दौरान भी Create किया जा सकता है या Current Activity के Create होने के पहले से भी ये Exist हो सकता है। इस प्रकार की State को विशेष रूप से तब एक External Persistent Store जैसे कि File के रूप में Manually Save करना जरूरी होता है, जबकि इसे किसी Activity की Lifecycle के दौरान Create किया गया होता है।
यदि इस प्रकार की State को Explicitly Save करने के लिए Activity पर “Save” Button उपलब्ध न हो, तो उस स्थिति में Implicit Persistent State के रूप में State Saving के इस काम को onPause() Method में किया जाना चाहिए। क्योंकि Low-Memory की Situation में onPause() Method के Execute होने के बाद किसी भी अन्य Lifecycle Method के Execute होने की कोई Guarantee नहीं होती। इसलिए किसी Important Data के Save होने के लिए हम कभी भी Instant State पर भरोसा नहीं कर सकते बल्कि इस प्रकार के Persistent State वाले प्रत्येक Important Data को हमें स्वयं ही Manually Save करना जरूरी होता है।
void onResume()
इस Method के Execute होने का मतलब यही है कि हमारे Android App की Main Activity पूरी तरह से Visible है। साथ ही किसी भी Android App की Activity के Foreground Cycle यानी Visual Lifecycle की शुरूआत इसी Method से होती है और इस Foreground Cycle में प्रत्येक Activity जरूरत के अनुसार बार-बार onResume() व onPause() Methods के बीच ही Switch होता है।
यानी जब भी कभी अधिक Urgency वाला Android App Activity, Current Activity को Overlap करता है, Current Android App के लिए onPause() Method Execute होता है और जब उस अधिक Priority वाले Android App को Close कर दिया जाता है, तब फिर से Current Android App की Activity के लिए onResume() Method Execute हो जाता है और ये प्रक्रिया तब तक लगातार चलती रहती है, जब तक कि Current Android App पूरी तरह से Close नहीं हो जाता।
जिस समय ये Method Execute होता है, उस समय हम ये मान सकते हैं कि Current Activity से सम्बंधित Views व उनकी View Hierarchy के States पूरी तरह से Restore हो चुके हैं और हम इस जानकारी का उपयोग अपनी Activity के Final State Changes के लिए कर सकते हैं।
चूंकि इस Method में कोई Bundle Type का Reference नहीं होता, इसलिए States को Fine-Tune करने के लिए हमें onCreate() या onRestoreInstanceState() Methods से आने वाली Information पर भी Depend करना पड़ता है। साथ ही यदि onPause() Method के दौरान किसी Animation अथवा Counter को Stop कर दिया गया हो, तो इस Method में उसे फिर से Restart कर सकते हैं।
void onPause()
इस Callback Method के Execute होने का मतलब यही है कि किसी अन्य High Priority वाली Activity के कारण Current Activity Background में चली गई है। इसलिए जिस समय Activity पूरी तरह से Visible थी, यदि उस समय Activity में कोई Counter अथवा Animation Run हो रहा था, तो उस Counter या Animation को इस Method में Stop करना होता है।
जिस Activity के लिए ये Method Execute होता है, उसके लिए onResume() अथवा onStop() में से कोई भी Method Execute हो सकता है। onResume() Method Execute होने पर Background में गई हुई Activity फिर से Foreground में आ जाती है, जबकि onStop() Method Execute होने पर वही Activity Background State में चली जाती है। यानी वह Android App पूरी तरह से Stop हो जाता है।
Android SDK के अनुसार ये वह Last Method है, किसी Android App व उसके Process के पूरी तरह से Close होने पर Guaranteed रूप से जरूर Execute होता है। इसलिए ये Method किसी भी Developer के लिए वह Last Method होता है, जहां वह अपने Android App के Persistent व Non-Persistent Data को External File के रूप में Explicitly Save कर सकता है।
Android SDK भी किसी Foreground Activity को Fully Active करने से पहले इस Method के Execute हो जाने का Wait करता है, इसलिए इस Method को छोटा से छोटा रखने की कोशिश करनी चाहिए यानी जहां तक हो सके, इस Method में कम से कम Programming Logic लिखने चाहिए। इस Method में भी Bundle Type का कोई Reference Pass नहीं किया जाता जिसका मतलब यही है कि इस Method से Persistent Data को External Storage (File or Network) के रूप में Save करने से सम्बंधित काम किए जाने चाहिए। साथ ही हम इस Method का प्रयोग किसी भी तरह के Counter या Animation को Stop करने के लिए भी कर सकते हैं।
यानी अपने Android App में जितने भी ऐसे Operations को हमने शुरू किया है, जिन्हें Compulsory रूप से Close किया जाना जरूरी है, उन सभी Operations को इसी Method में Stop किया जाना चाहिए, जबकि उन Stop किए गए Operations को यदि फिर से Resume करने की जरूरत हो, तो उन्हें Resume करने का काम onResume() Method में किया जाना चाहिए।
BUY “Android in Hindi” to Learn More about:
void onStop()
void onSaveInstanceState(Bundle saveStateBundle)
void onRestart()
void onRetainNonConfigurationInstance()
void onDestroy()
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Android in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Android in Hindi | Page: 628 | Format: PDF