2011-12-23 15 views
5

मैं इस लेख का अध्ययन कर रहा था, Avoid Memory Leaks। वहाँ कुछ सुझाव मेमोरी लीक से बचने के लिए कर रहे हैं, उनमें से एक के नीचे है:बाहरी कक्षा में वीक रेफरेंस के साथ स्थिर आंतरिक कक्षा कैसे एंड्रॉइड मेमोरी लीक से बच सकती है? उदाहरण की आवश्यकता है

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

1- कुछ एक एक उदाहरण देकर यह विस्तृत कर सकते हैं के रूप में ViewRoot और उदाहरण के लिए इसके डब्ल्यू भीतरी कक्षा में किया, बाहरी वर्ग के लिए एक WeakReference के साथ एक स्थिर भीतरी वर्ग का उपयोग करने के लिए है ?

2- आंतरिक कक्षाओं के लिए कमजोर संदर्भ के साथ स्थिर आंतरिक कक्षाओं का उपयोग कैसे करें?

3- मेमोरी लीक से बचने के लिए अपने आवेदन में उस स्थिर वर्ग का उपयोग करने के लिए सर्वोत्तम प्रथाएं क्या हैं।

ग्रेट धन्यवाद।

+0

क्या आपने इसे देखा है: http://stackoverflow.com/questions/5002350/android-weak-reference-of-inner-class? – davogotland

+0

धन्यवाद। हाँ मैंने इसे देखा है, लेकिन मुझे अभी भी स्पष्टीकरण के साथ एक साधारण उदाहरण की आवश्यकता है। –

उत्तर

1

इस पोस्ट में, एक जवाब का एक सरल उदाहरण से पता चलता कि आप क्या देख रहे हैं: How to instantiate interface in fragment?

लेकिन, एक समस्या यह है कि कभी कभी एक टुकड़ा, इसकी गतिविधि से अधिक समय रहता है, उदाहरण के लिए यदि गतिविधि एक है कॉन्फ़िगरेशन चेंज (जैसे घुमाया गया) तो गतिविधि नष्ट हो जाती है, लेकिन टुकड़े को जीवित रखा जा सकता है और फिर नई (घुमावदार) गतिविधि को फिर से जोड़ा जा सकता है। यह पोस्ट देखें: Android Fragment lifecycle over orientation changes

तो आपको वीक रेफरेंस का उपयोग करके प्रस्तावित समाधान में कोई समस्या हो सकती है, क्योंकि घूर्णन के बाद आपको पुरानी गतिविधि (या शायद कुछ भी नहीं) का संदर्भ होगा।

क्या मेरे लिए काम करने लगता है:

1) जब मैं गतिविधि के लिए एक रेफरी की जरूरत है, फोन getActivity()। उदाहरण के लिए, सदस्य AsyncTask क्लास के PostExecute() में यह सही कर सकते हैं।

2) अशक्त के लिए परिणाम (ऐसा हो सकता जाँच करें: टुकड़े उनकी गतिविधियों से अधिक समय रह सकते हैं)

3) यदि गतिविधि isFinishing() की जाँच करें - आप नहीं है कि राज्य में कुछ UI बातें करना चाहते हैं ।

4) अपने इंटरफ़ेस प्रकार पर गतिविधि कास्ट करें।

5) इंटरफ़ेस प्रकार में कॉलबैक कॉल करें।