2010-04-20 12 views
5

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

उत्तर

6

यदि आप it can cause significant memory leaks नहीं हैं तो आप ApplicationContext का उपयोग करने का अधिकार रखते हैं।

हालांकि, आपके पास समस्या यह है कि static चर इसके मूल्य को बरकरार नहीं रख सकता है। एंड्रॉइड अनुप्रयोगों को संभालने के तरीके के कारण यह संभव है कि आपका एप्लिकेशन मारे जा सके और फिर पुनरारंभ किया जा सके - आम तौर पर उपयोगकर्ता अन्य अनुप्रयोगों पर स्विच करने के कारण - इस तरह से कि आपका static वैरिएबल शून्य हो जाएगा और आपका कोड जो इसे सेट करता है ' टी चलाओ। Have a look at this question for a more detailed answer

इस समस्या के आसपास काम करना संभव हो सकता है लेकिन null समाप्त होने वाली सभी संभावनाओं का परीक्षण करना समय लेने वाली और त्रुटि प्रवण होगा। तो मेरी स्थिर वरीयता कक्षाओं में मैंने किसी भी विधि को बनाया है जिसके लिए Context एक तर्क के रूप में लेना आवश्यक है। उदाहरण के लिए:

static int getSomeIntegerPreference(Context context) { 
    return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0); 
} 

यह बदसूरत है लेकिन यह काम करता है।

+0

ठीक है, मैंने अपनी प्राथमिकताओं को सेट करने के लिए एप्लिकेशंस कॉन्टेंट() प्राप्त करने के लिए अपनी प्राथमिकताओं को सेट किया है। एप्लिकेशंस कॉन्टेंट()। तो मुझे लगता है कि जब तक आवेदन मर जाता है तब तक यह होना चाहिए (वीएम मर जाता है, प्रक्रिया हत्यारा हो जाती है, आदि ..)। और यदि यह मर जाता है, तो अगली शुरुआत में यह Preferences.applicationContext को फिर से शुरू करेगा, इसलिए मुझे लगता है कि इसे ठीक काम करना चाहिए। मुझे ऐसा कुछ चाहिए, बेक्यूज मुझे कुछ कक्षाओं में संदर्भ की आवश्यकता है जो getAplicationContext() नहीं देखते हैं। उदाहरण के लिए मेरी श्रेणी श्रेणी को प्रत्येक श्रेणी के लिए आइकन डाउनलोड करने की आवश्यकता है, इसलिए मैंने आइकन_पैथ को सेट किया है। filepath = Preferences.applicationContext.getCacheDir()। ToString – nixa

+1

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

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