android - टुकड़े के सेट को समझनाRetainInstance(बूलियन)




android-fragments (3)

SetRetainInstance (सत्य) खंड के जीवित रहने की अनुमति देता है। इसके सदस्यों को रोटेशन जैसे कॉन्फ़िगरेशन परिवर्तन के दौरान बनाए रखा जाएगा। लेकिन जब पृष्ठभूमि में गतिविधि की मौत हो जाती है तब भी यह मारे जा सकता है। यदि सिस्टम में पृष्ठभूमि में शामिल गतिविधि को मार दिया जाता है, तो यह इंस्टेंस स्टेट को सिस्टम द्वारा सहेजा जाना चाहिए जिसे आपने SaveInstanceState पर सही तरीके से संभाला है। एक और शब्द में ऑनसेवस्टेंसस्टेट हमेशा कॉल किया जाएगा। यद्यपि ऑनरेटिव्यू को कॉल नहीं किया जाएगा यदि SetRetainInstance सत्य है और खंड / गतिविधि अभी तक नहीं मारे गए हैं, फिर भी यह कहा जाएगा कि यह मारा गया है और वापस लाने की कोशिश की जा रही है।

यहां एंड्रॉइड गतिविधि / खंड की उम्मीद है कि यह मदद करता है। http://ideaventure.blogspot.com.au/2014/01/android-activityfragment-life-cycle.html

दस्तावेज़ीकरण से शुरू करना:

सार्वजनिक शून्य सेटRetainInstance (बूलियन बरकरार रखो)

नियंत्रित करें कि गतिविधि पुन: निर्माण (जैसे कॉन्फ़िगरेशन परिवर्तन से) में एक खंड उदाहरण बनाए रखा गया है या नहीं। इसका उपयोग केवल टुकड़ों के साथ किया जा सकता है जो पीछे की ढेर में नहीं हैं। यदि सेट किया गया है, तो गतिविधि को फिर से बनाया जाने पर खंड जीवन चक्र थोड़ा अलग होगा:

  • onDestroy () को नहीं बुलाया जाएगा (लेकिन ऑनडेट () अभी भी होगा, क्योंकि टुकड़े को अपनी वर्तमान गतिविधि से अलग किया जा रहा है)।
  • ऑनक्रेट (बंडल) को बुलाया नहीं जाएगा क्योंकि टुकड़ा फिर से बनाया नहीं जा रहा है।
  • पर अटैच (गतिविधि) और एक्टिविटीक्रेटेड (बंडल) अभी भी बुलाया जाएगा।

मेरे कुछ सवाल है:

  • क्या टुकड़ा भी अपना विचार बरकरार रखता है, या यह कॉन्फ़िगरेशन परिवर्तन पर पुनर्निर्मित किया जाएगा? वास्तव में "बनाए रखा" क्या है?

  • जब उपयोगकर्ता गतिविधि छोड़ देता है तो क्या टुकड़ा नष्ट हो जाएगा?

  • यह बैक स्टैक पर टुकड़ों के साथ क्यों काम नहीं करता है?

  • उपयोग के मामले कौन से हैं इस विधि का उपयोग करने के लिए यह समझ में आता है?


सबसे पहले, बनाए गए टुकड़ों पर मेरी पोस्ट देखें । यह मदद कर सकता है।

अब अपने सवालों के जवाब देने के लिए:

क्या खंड भी इसकी दृश्य स्थिति को बरकरार रखता है, या इसे कॉन्फ़िगरेशन परिवर्तन पर पुनर्निर्मित किया जाएगा - वास्तव में "बनाए रखा" क्या है?

हां, Fragment का राज्य कॉन्फ़िगरेशन परिवर्तन में बरकरार रखा जाएगा। विशेष रूप से, "बनाए रखा" का अर्थ है कि विखंडन कॉन्फ़िगरेशन परिवर्तनों पर नष्ट नहीं किया जाएगा। यही है, अगर विन्यास परिवर्तन अंतर्निहित Activity को नष्ट करने का कारण बनता है तो भी Fragment बरकरार रखा जाएगा।

जब उपयोगकर्ता गतिविधि छोड़ देता है तो क्या टुकड़ा नष्ट हो जाएगा?

Activity तरह ही, स्मृति संसाधन कम हो जाने पर सिस्टम द्वारा Fragment को नष्ट किया जा सकता है। चाहे आप अपने टुकड़े कॉन्फ़िगरेशन परिवर्तनों में अपने इंस्टेंस स्टेटस को बनाए रखते हैं, इस पर कोई प्रभाव नहीं पड़ेगा कि सिस्टम छोड़ने के बाद सिस्टम Fragment को नष्ट कर देगा या नहीं। यदि आप Activity छोड़ते हैं (यानी होम बटन दबाने से), तो Fragment नष्ट हो सकता है या नहीं। यदि आप बैक बटन दबाकर Activity छोड़ देते हैं (इस प्रकार, कॉलिंग finish() को प्रभावी ढंग से Activity को नष्ट कर देते हैं), Activity सभी संलग्न Fragment भी नष्ट हो जाएंगी।

यह बैक स्टैक पर टुकड़ों के साथ क्यों काम नहीं करता है?

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

उपयोग के मामले कौन से हैं इस विधि का उपयोग करने के लिए यह समझ में आता है?

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

आम तौर पर, मैं इसे समान रूप से onConfigurationChanged का उपयोग करने के लिए एक Activity साथ व्यवहार onConfigurationChanged ... इसे एक onConfigurationChanged के रूप में उपयोग न करें क्योंकि आप एक अभिविन्यास परिवर्तन को सही ढंग से कार्यान्वित / संभालने के लिए बहुत आलसी हैं। जब आपको आवश्यकता हो तो केवल इसका इस्तेमाल करें।


setRetaininstance केवल तभी उपयोगी होता है जब कॉन्फ़िगरेशन परिवर्तन के कारण आपकी activity नष्ट हो जाती है और पुनर्निर्मित होती है क्योंकि उदाहरण के दौरान कॉल के दौरान उदाहरण सहेजे जाते हैं onRetainNonConfigurationInstance । यही है, यदि आप डिवाइस को घुमाते हैं, तो बनाए रखा टुकड़े वहां रहेगा (वे नष्ट नहीं हुए हैं और फिर से बनाए गए हैं।) लेकिन जब रनटाइम संसाधनों को पुनः प्राप्त करने के लिए गतिविधि को मारता है, तो कुछ भी नहीं बचा है। जब आप वापस बटन दबाते हैं और गतिविधि से बाहर निकलते हैं, तो सब कुछ नष्ट हो जाता है।

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





android-fragments