2011-04-07 20 views
13

क्या यह विशेष रूप से इंस्टेंस वेरिएबल्स को Destroy() गतिविधि के कॉलबैक में शून्य करने के लिए सेट करना अच्छा विचार है? कुछ इस तरह:onDestroy() - सेट करने के लिए या उदाहरण के चर को शून्य करने के लिए सेट करने के लिए?

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    mClassVariable1 = null; 
    mClassVariable2 = null; 
    mClassVariable3 = null; 
} 

अगर मैं जावा SE कोई संदर्भ है कि & चल रहे एक कार्यक्रम & से कनेक्ट नहीं अलग हो जाती हैं कचरा वैसे भी एकत्र किया जा सकता से सही ढंग से याद है। तो क्या यह उपरोक्त अनिवार्य बनाता है?

दूसरी तरफ, मोबाइल उपकरणों में जीवन चक्र अलग-अलग है, क्या उपर्युक्त सर्वोत्तम अभ्यास होगा?

मैं जानता हूँ कि यह चोट नहीं कर सकते हैं यह करने के लिए, लेकिन कभी कभी वहाँ वर्ग चर के एक नंबर (indivudual UI तत्व आदि के लिए संदर्भ) कर रहे हैं, इसलिए मैं वास्तव में, मेरे अपने को समझने के लिए जानना चाहते हैं कि क्या वास्तव में हो रहा है ।

अग्रिम धन्यवाद!

+1

प्रश्न: यद्यपि ऑनडस्ट्राय() को तब कहा जाता है जब आप या तो गतिविधि से बाहर निकलते हैं या अपने डिवाइस को घुमाते हैं, क्या कक्षा अभी भी तत्काल रखी जाती है? यदि ऐसा है, तो चर को कम करने के लिए यह खतरनाक नहीं होगा। – Salsero69

+0

@ Salsero69: एक बहुत अच्छा सवाल है। मुझे यकीन नहीं है, उम्मीद है कि यहां जवाब जवाब देंगे। – OceanBlue

+0

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

उत्तर

7

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

+2

यह डेस्ट्रॉय में स्पष्ट शून्य संदर्भों के लिए अनिवार्य हो सकता है। आपको गारंटी नहीं है कि आपकी गतिविधि तुरंत मार जाएगी और इसलिए स्मृति को बनाए रखेगी। Http://stackoverflow.com/questions/17187004/large-memory-chunk-not-garbage-collected – Niels

+1

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

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