क्या बचाएं और क्या नहीं?
कभी आपने सोचा है कि EditText
ओरिएंटेशन चेंज होते समय टेक्स्ट अपने आप क्यों बच जाता है? खैर, यह जवाब आपके लिए है।
जब किसी गतिविधि की एक आवृत्ति नष्ट हो जाती है और सिस्टम एक नया उदाहरण (उदाहरण के लिए, कॉन्फ़िगरेशन परिवर्तन) को पुन: बनाता है। यह पुराने गतिविधि राज्य ( उदाहरण राज्य ) के सहेजे गए डेटा के एक सेट का उपयोग करके इसे फिर से बनाने की कोशिश करता है ।
इंस्टेंस स्टेट किसी ऑब्जेक्ट में संग्रहीत की -वैल्यू पेयर का एक संग्रह है Bundle
।
डिफ़ॉल्ट रूप से सिस्टम उदाहरण के लिए बंडल में दृश्य ऑब्जेक्ट्स को बचाता है।
- में पाठ
EditText
- एक
ListView
आदि में स्क्रॉल स्थिति
यदि आपको उदाहरण के राज्य के एक भाग के रूप में सहेजे जाने के लिए अन्य चर की आवश्यकता है तो आपको ओवरड्राइड onSavedInstanceState(Bundle savedinstaneState)
विधि चाहिए ।
उदाहरण के लिए, int currentScore
गेमएक्टिविटी में
डेटा की बचत करते समय onSavedInstanceState (बंडल saveinstaneState) के बारे में अधिक विवरण
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
तो गलती से अगर आप कॉल super.onSaveInstanceState(savedInstanceState);
करना भूल जाते हैं
तो डिफॉल्ट व्यवहार काम नहीं करेगा यानी टेक्स्ट इन एडिट टेक्स्ट सेव नहीं करेगा।
गतिविधि राज्य को पुनर्स्थापित करने के लिए कौन सा चयन करना है?
onCreate(Bundle savedInstanceState)
या
onRestoreInstanceState(Bundle savedInstanceState)
दोनों विधियों में एक ही बंडल ऑब्जेक्ट मिलता है, इसलिए यह वास्तव में कोई फर्क नहीं पड़ता कि आप अपने बहाल तर्क कहां लिखते हैं। अंतर केवल इतना है कि onCreate(Bundle savedInstanceState)
विधि में आपको एक शून्य जांच देनी होगी जबकि बाद के मामले में इसकी आवश्यकता नहीं है। अन्य उत्तरों में पहले से ही कोड स्निपेट हैं। आप उनका उल्लेख कर सकते हैं।
OnRestoreInstanceState के बारे में अधिक जानकारी (बंडल saveinstaneState)
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from the saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
}
हमेशा कॉल करें super.onRestoreInstanceState(savedInstanceState);
ताकि सिस्टम डिफ़ॉल्ट रूप से दृश्य पदानुक्रम को पुनर्स्थापित करे
बक्शीश
onSaveInstanceState(Bundle savedInstanceState)
प्रणाली द्वारा लाया ही जब उपयोगकर्ता गतिविधि के लिए वापस आने के लिए करना चाहता है है। उदाहरण के लिए, आप ऐप एक्स का उपयोग कर रहे हैं और अचानक आपको कॉल मिलता है। आप कॉलर ऐप पर जाते हैं और ऐप X पर वापस आते हैं। इस मामले में ऐपonSaveInstanceState(Bundle savedInstanceState)
विधि लागू होगी।
लेकिन इस पर विचार करें यदि कोई उपयोगकर्ता बैक बटन दबाता है। यह माना जाता है कि उपयोगकर्ता गतिविधि में वापस आने का इरादा नहीं करता है, इसलिए इस मामले onSaveInstanceState(Bundle savedInstanceState)
में सिस्टम द्वारा लागू नहीं किया जाएगा। डेटा सहेजते समय सभी बिंदुओं पर विचार करना चाहिए।
प्रासंगिक लिंक:
डिफ़ॉल्ट व्यवहार पर डेमो
Android आधिकारिक प्रलेखन ।