हम सभी जानते हैं कि एक संदर्भ वस्तु (एप्लिकेशन संदर्भ के अलावा) को स्थिर रूप से संग्रहीत करना खराब अभ्यास है क्योंकि इससे मेमोरी लीक हो सकती है। लेकिन क्या आप संदर्भ वस्तु से प्राप्त सिस्टम सेवा को स्टोर कर सकते हैं? जैसे ConnectivityManager?

// Is this okay?
static ConnectivityMananger connectivityManager;
...
connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
1
Matt 11 फरवरी 2019, 18:08

1 उत्तर

सबसे बढ़िया उत्तर

मैं ऐसी सिस्टम सेवा प्राप्त करने के लिए Context एप्लिकेशन का उपयोग करने की अनुशंसा करता हूं:

connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);

संभवतः सभी सिस्टम सेवाएं आंतरिक रूप से एप्लिकेशन Context का उपयोग करती हैं, लेकिन अतिरिक्त विधि कॉल की लागत के लिए यह दृष्टिकोण अधिक सुरक्षित है।

यदि सिस्टम सेवा एप्लिकेशन Context का उपयोग कर रही है, तो आप सिस्टम सेवा प्राप्त करते समय Context को लीक नहीं करेंगे। क्या आप सिस्टम सेवा के अपने उपयोग के माध्यम से कुछ और लीक करते हैं, यह भिन्न हो सकता है।

3
CommonsWare 11 फरवरी 2019, 15:19