2012-05-16 13 views
7

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

उत्तर

-1

यदि आप अपना अभिविन्यास लॉक कर रहे हैं तो आपको ठीक होना चाहिए। अन्यथा यदि आप एक विशेष गतिविधि उदाहरण से जुड़े विजेट को बनाए रखते हैं तो आप मेमोरी लीक के साथ समाप्त कर सकते हैं।

+0

लेकिन फ्रैगमेंट से जुड़े विजेट नहीं हैं? शायद मुझे याद आती है कि टुकड़े कैसे काम करते हैं। – Raykud

+1

भले ही अभिविन्यास बंद कर दिया गया हो, यह समस्याग्रस्त हो सकता है। एंड्रॉइड किसी भी विन्यास परिवर्तन के लिए दृश्य फिर से बनाता है। जबकि एक विन्यास परिवर्तन एक प्रदर्शन रोटेशन (सामान्य मामला), भाषा परिवर्तन, कुंजीपटल संलग्न/अलग और अन्य हो सकता है। स्क्रीन रोटेशन की देखभाल करना पूरी समस्या को हल नहीं करता है। – sstn

2

भले ही आप setRetainInstance(true) उपयोग करते हैं, अपने टुकड़ा अभी भी अपने विचारों को पुन: जब आप बारी बारी से होगा (आप एक कॉल onDestroyView और फिर onCreateView करने के लिए मिल जाएगा)। जब तक आप पिछले onDestroyView के विचारों के संदर्भ नहीं रखते हैं, तब तक पुरानी गतिविधि का कोई रिसाव नहीं होगा। सबसे अच्छा तरीका स्पष्ट रूप से onDestroyView में संदर्भों को स्पष्ट करना होगा, लेकिन onCreateView में आपका कोड आम तौर पर उन संदर्भों को ओवरराइट करेगा।

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

आप यह देखने के लिए जांच सकते हैं कि क्या आप using Eclipse MAT पर घूर्णन के बाद गतिविधि संदर्भों को लीक कर रहे हैं या नहीं।

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