2015-08-24 6 views
6

मैं एंड्रॉइड के लिए नया हूं और मैंने शुरुआती लोगों के लिए एक पुस्तक पढ़ी जो कहा कि onSaveInstanceState(Bundle) सिस्टम को आपके Activity को पुनः प्राप्त करने से पहले कहा जाता है। मैंने इसे कुछ परीक्षण कोडों पर आजमाया और इसे गलत पाया। मैंने पाया कि onSaveInstanceState(Bundle) को onPause() के बाद हर बार बुलाया गया था। और इसका सिस्टम पुन: दावा के साथ कुछ लेना देना नहीं है। मुझे इसके बारे में बहुत यकीन नहीं है, इसलिए यह सवाल है: onSaveInstanceState(Bundle) वास्तव में कब कहा जाता है?ऑनवेज़() के बाद बुलाए गए SaveInstanceState (बंडल) पर विधि है?

+0

आपको सक्रिय जीवन चक्र के बारे में पढ़ना चाहिए। यहां एक आरेख है: http://i.stack.imgur.com/EVuKo.png – dazito

+0

धन्यवाद, डेज़ीटो। मुझे लगता है कि मुझे अभी तस्वीर के साथ अपना मुद्दा मिला है: 'ऑन पॉज़()' प्रणाली को गतिविधि को मारने से पहले खुद को बुलाया जाता है, इसलिए यही कारण है कि 'ऑनसेवस्टेंसस्टेट (बंडल)' भी सुनिश्चित किया जाता है। लेकिन मैंने देखा कि 'ऑनस्टॉप() 'निश्चित रूप से एक जीवन चक्र में' ऑन पॉज़() 'से कम समय के लिए बुलाया जाएगा, और' ऑनस्टॉप() 'को सिस्टम को गतिविधि को मारने से पहले बुलाया जाना भी सुनिश्चित किया जाता है। तो क्यों 'ऑनसेवस्टेंसस्टेट (बंडल)' हमेशा 'ऑन पॉज़() 'के साथ जोड़ता है लेकिन' ऑनस्टॉप()' नहीं? 'SSaveInstanceState (बंडल) को इतनी बार क्यों बुलाया जाना चाहिए? ऐसा लगता है कि सिस्टम के लिए संसाधन का अपशिष्ट है। –

+1

क्योंकि आप अपनी वर्तमान गतिविधि के स्थान (स्क्रीन पर) ले जाने वाली एक और गतिविधि कर सकते हैं, इसलिए आपका ऑन पॉज़() कहा जाता है। एंड्रॉइड डॉक्स से: 'उदाहरण के लिए, जब अर्ध-पारदर्शी गतिविधि खुलती है (जैसे एक संवाद की शैली में से एक), पिछली गतिविधि रोकती है। जब तक गतिविधि अभी भी आंशिक रूप से दिखाई दे रही है लेकिन वर्तमान में फोकस में गतिविधि नहीं है, तो यह रोका गया है। 'Http://developer.android.com/training/basics/activity-lifecycle/pausing.html मैं आपको सभी गतिविधियों को ओवरराइड करने की सलाह देता हूं जीवन चक्र और चारों ओर खेलें ताकि आप गतिविधि को रोका/फिर से शुरू/रोक/नष्ट कर सकें आदि – dazito

उत्तर

1

Android Documentation के अनुसार:

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

हाँ onPause()onSaveInstanceState(Bundle) से पहले कहा जाता है। लेकिन onPause() गतिविधि life cycle

आमतौर पर जब अपनी गतिविधि है जब आप डिवाइस अभिविन्यास तो बदल आप अपने manifest.xml फ़ाइल में android:configChanges टैग निर्दिष्ट नहीं किया है, तो onSaveInstanceState(Bundle) कहा जाता है, उदाहरण के लिए फिर से बनाया जाता है की अपनी एक भाग के रूप में कहा जा गारंटी है।

2

मैं पिछले उत्तर से सहमत नहीं हूं।
Documentation के अनुसार:

तो कहा जाता है, इस विधि हो जाएगा onStop से पहले()। इस बारे में गारंटी देता है कि यह पहले से या बाद में होगा()।

+0

एक महत्वपूर्ण नोट के रूप में, 'ऑनसेवस्टेंसस्टेट() 'को ऑन-ऑन()' से पहले बुलाया जा सकता है। यह इस तथ्य के कारण हो सकता है कि (समर्थन) मैं उपयोग कर रहा हूँ फ्रैगमेंट 'ViewPager' में है। उम्मीद है कि यह किसी और के लिए सहायक है। – Sufian

संबंधित मुद्दे