android - Fragment#setRetainInstance(बूलियन) का उपयोग क्यों करें?




android-fragments android-lifecycle (2)

एक डेवलपर के रूप में आप इसका उपयोग कैसे करते हैं

कॉल setRetainInstance(true) । मैं आमतौर पर इसे onActivityCreated() या onActivityCreated() हूं, जहां मैं इसका उपयोग करता हूं।

और यह चीजों को आसान क्यों बनाता है?

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

मुझे Fragment # setRetainInstance (true) भ्रमित लगता है। एंड्रॉइड डेवलपर एपीआई से निकाला जावाडोक यहां दिया गया है:

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

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

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

प्रश्न: डेवलपर इसका उपयोग कैसे करते हैं, और यह चीजों को आसान क्यों बनाता है?


इस उत्तर को बहुत देर से जोड़ा, लेकिन मैंने सोचा कि यह चीजों को स्पष्ट करेगा। मेरे बाद कहो जब setRetainInstance है:

असत्य

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

सच

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

यह न भूलें कि उपरोक्त संवादप्रवाहों के साथ-साथ टुकड़े पर भी लागू होता है।





android-lifecycle