2012-07-15 19 views
13

क्या मैं आवेदन पर Context आवेदन के जीवन चक्र के दौरान बदल नहीं रहा हूं, इस पर भरोसा कर सकता हूं? क्या होगा यदि मैं कहीं भी context को सिंगलटन पैटर्न का उपयोग करके स्टोर करता हूं और फिर जहां भी मुझे आवश्यकता हो वहां उपयोग करें?आवेदन जीवन चक्र के दौरान आवेदन संदर्भ बदल सकते हैं?

+0

संभवतः यह सहायक हो सकता है: http://stackoverflow.com/questions/708012/android-how-to-declare- वैश्विक चर/4642069 # 4642069 –

+1

आपको संदर्भ संग्रहीत करने की आवश्यकता क्यों है? आप getAplicationContext() – Yury

+0

@Yury को कॉल करके हमेशा इसे प्राप्त कर सकते हैं: गैर गतिविधि या एप्लिकेशन क्लास से नहीं। –

उत्तर

14

पहले अपने दूसरे सवाल का जवाब करने के लिए: यदि आप एक सिंगलटन में कुछ राज्य स्टोर करने के लिए की जरूरत है, तो आप एंड्रॉयड Application वर्ग का उपयोग कर सकते है और अपने Application अपने सिंगलटन हो जाता है (यह भी एक Context है)। इसे स्टोर करने की कोई आवश्यकता नहीं होगी।

पहला सवाल करने के लिए, के रूप में है कि क्या Context पर क्रम बदला जा सकता है के लिए: your other question से संबंधित की तरह, मुझे लगता है कि हम ContextWrapper.attachBaseContext को देखकर कि यह पता लगाने कर सकते हैं:

protected void attachBaseContext(Context base) { 
    if (mBase != null) { 
     throw new IllegalStateException("Base context already set"); 
    } 
    mBase = base; 
} 

तो, हाँ, आप इस पर भरोसा कर सकते हैं; इसे बदला नहीं जा सकता है, और यदि आप कोशिश करते हैं, तो यह IllegalStateException फेंक देगा।

+0

अगर किसी कारण से आवेदन मारे जाएंगे तो क्या होगा? – Eugene

+0

यदि आवेदन मारे गए हैं, तो आप इसके बारे में कुछ भी नहीं कर सकते क्योंकि आप भी मारे गए हैं। क्या आपको एप्लिकेशन को बंद होने और पुनरारंभ करने के दौरान डेटा जारी रखने की आवश्यकता है? आप इसके लिए साझा प्राथमिकताओं का उपयोग करना चाहते हैं। –

6

एंड्रॉइड Application कक्षा सूचना संग्रहित करने के लिए आपका सिंगलटन है जिसे अनुप्रयोग जीवन चक्र चरणों के माध्यम से ट्रैक किया जाना चाहिए। आप मैनुअल में इस वर्ग का विवरण चेकआउट कर सकते हैं - http://developer.android.com/reference/android/app/Application.html

0

एप्लिकेशन क्लास में एंड्रॉइड एप्लिकेशन के लिए एक सिंगलेशन एप्लिकेशन लेवल क्लास है। मेरा जवाब नहीं है कि आप एप्लिकेशन संदर्भ ऑब्जेक्ट को नहीं बदल सकते हैं।

1

इस विषय के आसपास कुछ विवाद है। Google के कुछ लोगों में से कुछ भी। मैं जो रखता हूं वह सही दृष्टिकोण है जो मूल रूप से जितनी बार संभव हो सके गतिविधि संदर्भ प्राप्त करने का प्रयास करता है। कारण, संदर्भ का बिंदु आपके ऐप के कुछ संसाधन/भागों को पर्यावरण प्रदान कर रहा है, जिससे पर्यावरण काम कर रहा है। अधिक यानी सही है जानकारी आप व्यवस्था करने के लिए देते हैं, कम अनपेक्षित व्यवहार घटित होता (.: तुम बस गतिविधि संदर्भ दायरे के भीतर कुछ संसाधनों तक पहुंच और एप्लिकेशन संदर्भ से इसका उल्टा है।

कि याद रखें गतिविधि एक संदर्भ है, ताकि यदि आप एक कोड के अंदर हैं, या "getActivity()" अगर आपका कोड किसी टुकड़े के भीतर से काम करता है तो "यह" नौकरी कर देगा।

इसके अलावा, मुझे देवताओं से सहमत होना है .com। सिंगलटन के रूप में अपनी खुद की एप्लिकेशन क्लास का उपयोग करना बहुत उपयोगी है, क्योंकि आप ऐप के जीवन चक्र को आसानी से प्रबंधित कर सकते हैं और इसे उचित मध्य बिंदु के रूप में उपयोग कर सकते हैं। एक बार फिर, ऐपकॉन्टेक्स्ट प्राप्त करने के लिए यह getAplicationContext या यहां तक ​​कि कॉल करने के लिए पर्याप्त है आपके एप्लिकेशन सिंगलटन क्लास का उदाहरण

1

हाँ आप इस पर भरोसा कर सकते हैं कि आवेदन जीवन चक्र के दौरान संदर्भ नहीं बदला गया है!

Google Application कक्षा अवलोकन में ऐसा कहता है।

मुझे लगता है कि यह आपके मामले के लिए बिल्कुल सही होगा।

1

एप्लिकेशन एक सिंगलटन है और मुझे कोर बदलने के बिना बाईपास करने का कोई तरीका नहीं पता है।

हालांकि यदि आपका कोड दूसरी प्रक्रिया शुरू करता है तो एप्लिकेशन ऑब्जेक्ट के 2 उदाहरणों का सामना करने की संभावना है। एक उदाहरण रिमोट सेवा शुरू करेगा; यह एक और प्रक्रिया तैयार करेगा जो एप्लिकेशन ऑब्जेक्ट का अपना उदाहरण बनायेगा। आशय putExtra

हैंडलर आशय बंडल -

संदेश:

http://developer.android.com/reference/android/app/Service.html#RemoteMessengerServiceSample

भ्रम आप दूरस्थ सेवा और Parcelable या Serializable एंड्रॉयड विकल्पों में से एक का उपयोग करके एप्लिकेशन के बाकी के बीच संवाद करना चाहिए से बचने के लिए

या अपना खुद का

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