मेमोरी रिसाव से बचने के लिए मैंने निम्नलिखित विधि लिखी है जिसका उपयोग गतिविधियों में और मुख्य रूप से टुकड़ों (विरासत का उपयोग करके) में किया जाएगा। यही कारण है कि विधि के लिए मुझे कभी सीधेgetActivity() के बजाय कमजोर संदर्भ (एंड्रॉइड मेमोरी रिसाव से बचें)?
//this or getActivity()
बुला विधि द्वारा गतिविधि को रेफ़र करने की अनुमति माना जाता है है:
private WeakReference<BaseActivity> activityWeakReference = null;
public BaseActivity getActivityFromWeakReference(){
activityWeakReference = activityWeakReference == null ?
new WeakReference<BaseActivity>((BaseActivity)getActivity()) :
activityWeakReference;
return activityWeakReference.get();
}
इस विधि getActivityFromWeakReference()
बुला रहा है getActivity()
सुरक्षित करने के बजाय स्मृति रिसाव खतरा के अनुसार?
यदि ऐसा करना सुरक्षित नहीं है, तो क्या मुझे activityWeakReference
वापस कर देना चाहिए और इसे सुरक्षित बनाने के लिए get()
विधि को कॉल करना चाहिए?
मैं इसे कई टुकड़ों में उपयोग कर रहा हूं और मुझे अब तक कोई समस्या नहीं है। क्योंकि मैं इस (here) को पढ़ने मैं सवाल पूछ:
जब तक सहायक के जीवनकाल
Activity
के जीवन भर के भीतर है, तो वहाँ एकWeakReference
उपयोग करने की आवश्यकता है। यदि सहायकActivity
से अधिक समय तक जीवित रह सकता है, तो आपको सिस्टम को नष्ट करने पर आपके ऑब्जेक्ट ग्राफ़ मेंActivity
को बनाए रखने से बचने के लिएWeakReference
का उपयोग करना चाहिए।
अब तक, मुझे ऐसे मामले का सामना नहीं करना पड़ा जहां एक निर्दिष्ट तत्व गतिविधि को पार कर गया। अगर आपको कोई त्रुटि मिलती है या संभव है तो कृपया इसे टिप्पणियों में लिखें।
ध्यान दें कि आपकी विधि शून्य हो सकती है, जब 'गतिविधिवाइक रेफरेंस' शून्य नहीं है, लेकिन 'ActivityWeakReference.get() 'है। –
@ मेटस गोंडिम, इनपुट के लिए धन्यवाद, मैं इसे पहले इस्तेमाल करने से पहले शून्य की जांच करता हूं। –