2011-10-13 15 views
6

मैं अन्य लॉन्च के बाद इसे पुनर्स्थापित करने में सक्षम होने के लिए एप्लिकेशन स्थिति को सहेजना चाहता हूं। क्या SaveInstanceState पर विधि का उपयोग करना बेहतर है और इसे बंडल में सहेजना या साझा किए गए संदर्भों का उपयोग करना बेहतर है?एंड्रॉइड - बचत अनुप्रयोग स्थिति

धन्यवाद

उत्तर

8

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

+0

हां, मुझे पुनरारंभ होने के बाद ऐप स्थिति को पुनर्स्थापित करने में सक्षम होना चाहिए। तोSSaveInstanceState() सबसे अच्छा समाधान होगा – Waypoint

+0

यदि एप्लिकेशन वास्तव में सिस्टम द्वारा बंद हो जाता है, तो सहेजे गए इंस्टेंस स्थिति खो जाएंगी। डिवाइस को बंद करने के लिए भी यही होता है। यदि आप उन मामलों में राज्य को बरकरार रखना चाहते हैं, तो 'ऑनसेवस्टेंसस्टेट()' पर्याप्त नहीं होगा। –

+0

ओह, धन्यवाद, SharedPreferences तो लक्ष्य – Waypoint

1

मैं यहाँ अन्य पोस्टर में से कुछ के रूप में ही विकास चॉप नहीं हो सकता है (मैं गंभीरता से जुलाई 2012 के बाद से एप्लिकेशन विकसित किया गया है), लेकिन मुझे है एक समाधान मिला जो साझा किए गए संदर्भों के साथ-साथ ऑनसेवस्टेंसस्टेट() को एकीकृत करता है।

मेरी ऐप में एक स्पलैश स्क्रीन गतिविधि है जो साझा किए गए संदर्भों से मान पढ़ती है और उन्हें उचित चर के लिए असाइन करती है। इसके अतिरिक्त, मेरे द्वारा बनाई गई प्रत्येक गतिविधि का अपना स्वयंसेवस्टेंसस्टेट() विधि है, और मैं प्रत्येक गतिविधि में, साझा किए गए सभी संदर्भों को साझा करने के लिए आवश्यक सभी डेटा करता हूं। चूंकि SaveInstanceState() एक ऐप या गतिविधि सामान्य रूप से बंद होने से पहले चलाया जाता है, इसलिए इसे सभी सामान्य परिस्थितियों में डेटा मानों का बैक अप लेना चाहिए।

यह सबसे अधिक कोड-कुशल समाधान नहीं हो सकता है, खासकर कई क्रियाकलापों के साथ बड़े ऐप्स में, लेकिन जहां तक ​​मेरे परीक्षण जाते हैं, यह आपके ऐप को डेटा हानि से 99% समय से बचाता है।

यदि कोई अधिक अनुभवी डेवलपर इसमें शामिल होना और पुष्टि करना या इनकार करना चाहते हैं, तो मुझे यकीन है कि यह प्रश्न और उत्तर को समृद्ध करेगा।

+0

मुझे पता है कि यह पुराना है, लेकिन भविष्य के पाठकों के लिए: 'ऑनसेवस्टेंसस्टेट' एक ऐप या गतिविधि सामान्य रूप से बंद होने से पहले नहीं चलाया जाता है। यह ऐप से पहले चलाता है या गतिविधि सिस्टम (जैसे उन्मुखीकरण परिवर्तन, कम स्मृति, पृष्ठभूमि के लिए जा रहा) द्वारा बंद है। एक महत्वपूर्ण मामला जब इसे नहीं कहा जाता है तब होता है जब कोई उपयोगकर्ता बैक बटन दबाकर गतिविधि से बाहर निकलता है – bcorso

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