इसे पढ़ने के बाद मुझे ViewModels के संबंध में कुछ प्रश्नों के साथ छोड़ दिया गया था:
https://developer.android.com/topic/libraries/आर्किटेक्चर/सेविंग-स्टेट्स
यह यहां कहता है कि आपको कॉन्फ़िगरेशन परिवर्तन (जैसे स्क्रीन रोटेशन) के लिए ViewModel
दोनों के संयोजन का उपयोग करना चाहिए, और अन्य सभी मामलों के लिए onSaveInstanceState()
का उपयोग करना चाहिए जहां एक गतिविधि नष्ट हो जाती है और फिर इसे बचाने के लिए फिर से बनाया जाता है यूआई राज्य।
मेरा सवाल यह है कि जब onCreate(Bundle)
को कॉल किया जाता है तो हम राज्य को पुनर्स्थापित करने का तरीका कैसे जानते हैं - क्या मुझे व्यूमोडेल का उपयोग करना चाहिए या क्या मुझे पैरामीटर के रूप में प्राप्त बंडल का उपयोग करना चाहिए? जब कॉन्फ़िगरेशन बदलता है, onSaveInstanceState()
को भी कॉल किया जाता है, और जाहिर तौर पर onCreate()
को हमेशा कॉल किया जाता है।
अगर मैं केवल व्यूमोडेल से राज्य को पुनर्स्थापित करता हूं, तो यह हमेशा सही डेटा के साथ नहीं रहेगा (चूंकि कॉन्फ़िगरेशन परिवर्तनों के अलावा अन्य कारणों से गतिविधि नष्ट हो सकती थी)। यदि मैं केवल onSaveInstanceState()
में सहेजे गए बंडल का उपयोग करता हूं तो मैं ViewModel
का उपयोग क्यों शुरू करूं?
1 उत्तर
मुझे लगता है कि इन स्रोतों को एक श्रृंखला के रूप में सोचना अच्छा है। आपके पास डेटा के 2 स्रोत हैं - व्यूमोडेल, जो तेज़ है लेकिन कम रहता है और सहेजी गई इंस्टेंस स्थिति धीमी है लेकिन लंबे समय तक रहती है।
नियम सरल है - अपने व्यूमोडेल का उपयोग करने का प्रयास करें और यदि यह पॉप्युलेट नहीं है तो onSaveInstanceState() से बंडल का उपयोग करें।
जब आप val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
ऑनक्रिएट () में करते हैं, तो आप जांच सकते हैं कि क्या आपको व्यूमोडेल का एक नया उदाहरण मिलता है। फिर, यदि यह एक नया उदाहरण है (यानी इसके डेटा फ़ील्ड खाली हैं) तो आप अपने बंडल से कुछ बुनियादी डेटा प्राप्त कर सकते हैं, जैसे सामग्री आईडी, और उस आईडी के आधार पर बैकएंड या डेटाबेस से डेटा प्राप्त कर सकते हैं, इसके साथ अपना नया व्यूमोडेल पॉप्युलेट कर सकते हैं और फिर ViewModel से अपनी गतिविधि को पॉप्युलेट करें (यदि आप LiveData का उपयोग कर रहे हैं तो यह बहुत स्वाभाविक होगा)।
अगली बार onCreate को कहा जाता है कि आप प्रक्रिया को दोहराएं, या तो ViewModel से अपनी गतिविधि को पॉप्युलेट करें या बंडल में डेटा का उपयोग करके अपने ViewModel को पॉप्युलेट करें और फिर अपने ViewModel से अपनी गतिविधि को पॉप्युलेट करें।
अद्यतन: वास्तव में आधिकारिक docs में वर्णित बहुत समान दृष्टिकोण है। फर्क सिर्फ इतना है कि आप बंडल को व्यूमोडेल में पास करते हैं और यह तय करता है कि उसे डेटा लाने की जरूरत है या नहीं, मैं इस तंत्र के बारे में विशिष्ट नहीं था।
नए सवाल
android
एंड्रॉइड Google का मोबाइल ऑपरेटिंग सिस्टम है, जिसका उपयोग प्रोग्रामिंग या डिजिटल डिवाइस (स्मार्टफोन, टैबलेट, ऑटोमोबाइल्स, टीवी, वियर, ग्लास, IoT) को विकसित करने के लिए किया जाता है। एंड्रॉइड से संबंधित विषयों के लिए, एंड्रॉइड-विशिष्ट टैग जैसे कि एंड्रॉइड-इरादे, एंड्रॉइड-गतिविधि, एंड्रॉइड-एडॉप्टर आदि का उपयोग करें। विकास या प्रोग्रामिंग के अलावा अन्य प्रश्नों के लिए, लेकिन एंड्रॉइड फ्रेमवर्क से संबंधित हैं, इस लिंक का उपयोग करें: https: // android.stackexchange.com।