2012-08-07 15 views
5

एक फ्रैगमेंट के भीतर डेटा को सबसे अच्छी तरह से कैसे बनाए रखता है क्योंकि इसकी गतिविधि रोटेशन से जैसे चक्र/नष्ट चक्र पर जाती है?एंड्रॉइड फ्रैगमेंट्स डेटा को बनाए रखना

हमारे सेटअप में हमारे पास हमारे सर्वर से टुकड़े कस्टम सूची एडाप्टर में संभावित रूप से बड़ी सूचियां हैं और हम उन्हें रोटेशन पर पुनः लोड न करके यूएक्स को सुचारू बनाना चाहते हैं। टुकड़े को स्थापित करने के साथ हमारे पास समस्या थींस्टेंस = सत्य; यह है कि हमारे एडाप्टर में मूल गतिविधि के संदर्भ का संदर्भ है और इसलिए स्मृति को रिसाव कर देगा। क्या हम सिर्फ खंड को डेटा संग्रहित कर सकते हैं और एडाप्टर को फिर से बना सकते हैं; अगर ऐसा है तो वास्तव में उचित अभ्यास है?

अगला विचार डेटा को सिंगलटन ऑब्जेक्ट में संग्रहीत करना है और घूर्णन के बाद पुनर्प्राप्त करना है जो बालों के डेटा के साथ कुछ समस्याएं प्रस्तुत करता है लेकिन हम आसानी से पार कर सकते हैं।

अन्य विकल्प जो मैं देखता हूं, ऐसा लगता है कि यह सबसे अच्छा समाधान है, डेटा को एक बंडल में सहेजना और घूर्णन के बाद नए खंड में बहाल करना है; हालांकि, हमारे पास बहुत सी वस्तुएं हैं जिन्हें पूरे ऐप में संग्रहीत करने की आवश्यकता होगी और हमारी कुछ वस्तुएं जटिल हैं, सूचियां, एकाधिक प्रकार हैं, और पार्सल बनाने योग्य दर्द होगा। क्या कोई बेहतर समाधान है या क्या हमें बुलेट काटने और उन्हें पार्सल करने योग्य बनाना है?

+0

गतिविधि के बजाए एडाप्टर में एप्लिकेशन संदर्भ को आप कैसे पास करते हैं? यदि आप अलग-अलग थीम्ड संदर्भों के साथ मुश्किल सामान नहीं कर रहे हैं, तो मैं किसी भी तरह से एप्लिकेशन संदर्भ का उपयोग करने की सलाह दूंगा, क्योंकि यह आपके ऐप के जीवनकाल में नहीं बदलेगा। –

उत्तर

4

बस गतिविधि को रोटेशन (आदि) पर पुनर्निर्मित करने से रोकें।

android:configChanges="keyboardHidden|orientation|screenSize" 

आपके AndroidManifest.xml में आपकी गतिविधि परिभाषा में जोड़ें। फिर घूर्णन पर कुछ भी बचाने की जरूरत नहीं है।

संपादित करें:

आपको लगता है कि समाधान तो आप लेकिन onSaveInstanceState तंत्र का उपयोग करने के अलावा कोई चारा नहीं मिल गया है पसंद नहीं है। यदि आपके पास जटिल डेटा है, तो बस अपनी कक्षाओं को Serializable बनाएं और उन्हें उस तरह बंडल में जोड़ें।

+3

चूंकि यह एंड्रॉइड दस्तावेज और अन्य जगहों पर भारी हतोत्साहित है क्योंकि हम इसे व्यवहार्य विकल्प के रूप में नहीं देख रहे हैं। http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance() –

+2

फिर आपके पास ऑनसेवस्टेंसस्टेट तंत्र का उपयोग करने के अलावा कोई विकल्प नहीं है। यदि आपके पास जटिल डेटा है, तो बस अपनी कक्षाओं को Serializable बनाएं और उन्हें उस तरह बंडल में जोड़ें। –

+1

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

1

एंड्रॉयड स्थापना: configChanges

Android मेनिफेस्ट में

विशेषता अक्षम डिफ़ॉल्ट को नष्ट और पुन: व्यवहार के लिए hackiest और सबसे व्यापक रूप से दुर्व्यवहार समाधान नहीं है।

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

0

http://developer.android.com/guide/topics/resources/runtime-changes.html,you के अनुसार पूरी तरह से जब तक यह साथ संबद्ध नहीं है टुकड़ा में डेटा बचा सकते हैं:

टुकड़े साथ विन्यास बदलाव हैंडलिंग पर कि बारे में अधिक देखें गतिविधि, विचार, इत्यादि। बंडल वास्तव में भारी मात्रा में डेटा के लिए नहीं हैं और धारावाहिक धीमा है, इसलिए बड़ी मात्रा में डेटा के लिए एक टुकड़ा आदर्श है।

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

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