OnCreate क्या है (बंडल को बचाया गया


122

किसी को भी मदद मेरे बारे में पता करने के लिए कर सकते हैं Bundle savedInstanceStateमें onCreate(Bundle savedInstanceState)मैं Android में नौसिखिया हूँ। मैं इसे developer.android.com से समझने की कोशिश करता हूं। लेकिन मैं समझ नहीं पा रहा हूं। क्या कोई इसे सरल कर सकता है?


जवाबों:


106

यदि आप एक बंडल में एप्लिकेशन की स्थिति (आमतौर पर गैर-स्थिर, गतिशील डेटा onSaveInstanceState) को सहेजते हैं , तो इसे वापस पारित किया जा सकता है onCreateयदि गतिविधि को फिर से बनाया जाना चाहिए (जैसे, अभिविन्यास परिवर्तन) ताकि आप इसे पहले खो न दें जानकारी। यदि कोई डेटा नहीं दिया गया था, savedInstanceStateतो अशक्त है।

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

स्रोत


2
क्या अन्य गतिविधियाँ उसी बंडल को साझा करती हैं ?, यदि मैं दूसरी गतिविधि शुरू करता हूँ, तो क्या वह पहले बंडल से गुजरती है?
फ्रांसिस्को कॉर्लेस मोरेल्स

17

onCreate(Bundle savedInstanceState)Bundleजब गतिविधि पहली बार शुरू होगी तो आपको अशक्त मिलेगा और गतिविधि उन्मुखीकरण में परिवर्तन होने पर इसका उपयोग हो जाएगा ......।

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

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

हम बंडल से सहेजे गए इंस्टेंस स्टेट को onCreateविधि के तर्क के रूप में लोड कर सकते हैं । हम सहेजे गए इंस्टेंस राज्य को onRestoreInstanceStateविधि में लोड भी कर सकते हैं । लेकिन मैं पाठकों का पता लगाने के लिए इसे छोड़ दूंगा।


11
savedInstanceStateगैर होगा- nullअगर onSavedInstanceState()पहले कहा जाता था। अभिविन्यास परिवर्तन केवल एक उदाहरण है जिसमें यह हो सकता है।
एलेक्स लॉकवुड

1
@AlexLockwood, मैं उन सभी स्थितियों के बारे में सोचने की कोशिश कर रहा हूँ जहाँ यह हो सकता है। क्या कोई दस्तावेज है? एक उदाहरण मैं सोच सकता हूं कि क्या उपयोगकर्ता ऐप्स स्विच करता है और वापस आता है, लेकिन संसाधनों को पुनर्प्राप्त करने के लिए गतिविधि नष्ट हो गई है। इस स्थिति में एंड्रॉइड एक बंडल के साथ गतिविधि को फिर से बनाएगा अगर onSaveInsanceState () ओवरराइड किया गया था, ठीक है?
बैटब्रेट

1
@batbrat हां ... मैंने (लगभग दो साल पहले) जो टिप्पणी की थी, वह पूरी तरह सही नहीं है। मुझे लगता है कि इसे लगाने का सबसे अच्छा तरीका गैर-होगा Bundleतर्क onCreate(Bundle)है - nullअगर और केवल अगर Activityयह onSaveInstanceStateविधि पहले कहलाती है। यह अभिविन्यास परिवर्तन के दौरान होता है ... और ऐसा तब भी होता है जब ओएस द्वारा मारे जाने के बाद गतिविधि वापस आ रही होती है, और जब आप अपने डिवाइस पर किसी अन्य कॉन्फ़िगरेशन परिवर्तन को ट्रिगर करते हैं।
एलेक्स लॉकवुड

एलेक्स के स्पष्टीकरण के लिए धन्यवाद। विषय पर कुछ स्पष्टता रखना अच्छा है। मैं विशेष रूप से अभिविन्यास स्विच के अलावा कॉन्फ़िगरेशन परिवर्तन के बारे में भूल गया था।
बैटब्रेट

15

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

मान लीजिए, आपके पास TextView और एक बटन के साथ एक साधारण टुकड़ा है। हर बार जब आप बटन पर क्लिक करते हैं तो पाठ में परिवर्तन होता है। अब, आप डिवाइस / एमुलेटर का ओरिएंटेशन बदलें और ध्यान दें कि आपने डेटा खो दिया है (मतलब आपको क्लिक करने के बाद बदले हुए डेटा) और टुकड़ा पहली बार फिर से शुरू होता है। बंड सहेजे हुए का उपयोग करके। InstanceState हम इससे छुटकारा पा सकते हैं। यदि आप टुकड़े के जीवन काल में एक नज़र रखना। टुकड़ा जीवनचक्र आपको मिलेगा कि एक विधि "onSaveInstanceState" कहलाती है जब टुकड़ा नष्ट होने वाला होता है।

तो, हम इस तरह से उस बंडल में परिवर्तित पाठ मान का मतलब राज्य को बचा सकते हैं

 int counter  = 0;
 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("value",counter);
 }

ओरिएंटेशन करने के बाद "onCreate" विधि को सही कहा जाएगा? इसलिए हम ऐसा कर सकते हैं

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null){
        //it is the first time the fragment is being called
        counter = 0;
    }else{
        //not the first time so we will check SavedInstanceState bundle
        counter = savedInstanceState.getInt("value",0); //here zero is the default value
    }
}

अब, आप अभिविन्यास के बाद अपना मूल्य नहीं खोएंगे। हमेशा संशोधित मूल्य प्रदर्शित किया जाएगा।


ध्यान दें कि यह गतिविधि पर भी सही है। क्या आप (बंडल ऑफ एक्टिविटी) और बंडल ऑफ फ्रैगमेंट के अंतर पर अधिक व्याख्या कर सकते हैं?
लालागुएर

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

5

onCreate (बंडल सहेजा गया है। InstanceState) Android में फ़ंक्शन:

1) जब कोई गतिविधि पहली बार कॉल या लॉन्च की जाती है, तो गतिविधि बनाने के लिए onCreate (बंडल सहेजी गई InstanceState) विधि जिम्मेदार होती है।

2) जब कभी भी अभिविन्यास (अर्थात क्षैतिज से ऊर्ध्वाधर या ऊर्ध्वाधर से क्षैतिज) गतिविधि में परिवर्तन हो जाता है या जब किसी गतिविधि को किसी भी ऑपरेटिंग सिस्टम द्वारा बलपूर्वक समाप्त कर दिया जाता है तब SaveInstanceState अर्थात बंडल क्लास की वस्तु एक गतिविधि की स्थिति को बचाएगा।

3) ओरिएंटेशन बदले जाने के बाद onCreate (बंडल सहेजी गई InstanceState) गतिविधि को कॉल करेगा और फिर से बनाएगा और saveInstanceState से सभी डेटा लोड करेगा।

4) मूल रूप से बंडल क्लास का उपयोग गतिविधि के डेटा को स्टोर करने के लिए किया जाता है जब भी ऊपर की स्थिति ऐप में होती है।

5) ऐप्स के लिए onCreate () की आवश्यकता नहीं है। लेकिन इसका उपयोग ऐप में किया जाता है, क्योंकि यह विधि इनिशियलाइज़ेशन कोड डालने के लिए सबसे अच्छी जगह है।

6) आप अपना इनिशियलाइज़ेशन कोड onStart () या onResume () में भी डाल सकते हैं और जब आप ऐप को पहले लोड करेंगे, तो यह onCreate () की तरह ही काम करेगा।


4

onCreate(Bundle)कहा जाता है जब गतिविधि पहली बार शुरू होती है। आप इसका उपयोग उपयोगकर्ता इंटरफ़ेस बनाने जैसे वन-टाइम इनिशियलाइज़ेशन करने के लिए कर सकते हैं।onCreate()एक पैरामीटर लेता है जो या तो शून्य या कुछ राज्य की जानकारी पहले से सहेजा गया है onSaveInstanceState


0

onCreate (बंडल सहेजी गई InstanceState) को कॉल किया जाता है और सहेजा जाता है। यदि आपकी गतिविधि और दृश्य वर्णन में इसे समाप्त कर दिया गया था, तो InstanceState गैर-शून्य हो जाएगा। आपका ऐप तब saveInstanceState से डेटा को पकड़ सकता है और अपनी गतिविधि को पुन: उत्पन्न कर सकता है

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