मेरी गतिविधि एक अलर्टडालॉग बनाने की कोशिश कर रही है जिसके लिए एक पैरामीटर के रूप में एक संदर्भ की आवश्यकता होती है। यदि मैं उपयोग करता हूं तो यह अपेक्षित है:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
हालाँकि, मैं स्मृति के लीक होने की संभावना के कारण एक संदर्भ के रूप में "इस" का उपयोग करने की लीरी हूं, जब गतिविधि को नष्ट कर दिया जाता है और स्क्रीन रोटेशन जैसी सरल चीज़ के दौरान भी इसे फिर से बनाया जाता है। एक से Android डेवलपर के ब्लॉग पर संबंधित पोस्ट :
संदर्भ से संबंधित मेमोरी लीक से बचने के दो आसान तरीके हैं। सबसे स्पष्ट है कि अपने स्वयं के दायरे से बाहर के संदर्भ से बचने के लिए। ऊपर दिए गए उदाहरण ने एक स्थिर संदर्भ का मामला दिखाया लेकिन आंतरिक वर्ग और बाहरी वर्ग के लिए उनका अंतर्निहित संदर्भ समान रूप से खतरनाक हो सकता है। दूसरा समाधान अनुप्रयोग संदर्भ का उपयोग करना है। यह संदर्भ तब तक जीवित रहेगा जब तक आपका आवेदन जीवित है और गतिविधियों के जीवन चक्र पर निर्भर नहीं करता है। यदि आप लंबे समय तक जीवित वस्तुओं को रखने की योजना बनाते हैं, जिन्हें एक संदर्भ की आवश्यकता होती है, तो एप्लिकेशन ऑब्जेक्ट को याद रखें। आप इसे Context.getApplicationContext () या Activity.getApplication () कॉल करके आसानी से प्राप्त कर सकते हैं।
लेकिन के लिए AlertDialog()
न तो getApplicationContext()
या getApplication()
एक संदर्भ के रूप में स्वीकार्य है, के रूप में यह अपवाद फेंकता है:
"विंडो जोड़ने में असमर्थ - टोकन नल अनुप्रयोग के लिए नहीं है"
प्रति संदर्भ: 1 , 2 , 3 , आदि।
इसलिए, क्या इसे वास्तव में एक "बग" माना जाना चाहिए, क्योंकि हमें आधिकारिक तौर पर उपयोग करने की सलाह दी जाती है Activity.getApplication()
और फिर भी यह विज्ञापित के रूप में कार्य नहीं करता है?
जिम