2012-09-08 10 views
5

मुझे हाल ही में बताया गया है कि सिंगलटन के रूप में इसका उपयोग करने के लिए एप्लिकेशन क्लास को विस्तारित करना एक बुरा अभ्यास था लेकिन बिना किसी स्पष्टीकरण के।
तो इस कक्षा के उपयोग के पीछे संभावित समस्याएं क्या हैं? मैंने इसे कई परियोजनाओं में इस्तेमाल किया है।आवेदन कक्षा और अच्छे व्यवहारों का विस्तार

इसके अलावा, यदि अनुप्रयोग कक्षा का उपयोग करना एक बुरा विचार है, तो आवेदन स्तर चर को स्टोर करने के विकल्प क्या हैं?

उत्तर

2

सिंगलटन कक्षा का उपयोग करने के साथ-साथ Application कक्षा का विस्तार करने में समस्या यह है कि यदि आवेदन प्रक्रिया मारे जाती है - जो तब होता है जब ऐप पृष्ठभूमि में बहुत लंबा रहता है - ऑब्जेक्ट सभी खो देंगे आपका डेटा।

हालांकि, Application कक्षा का उपयोग करना उन मामलों में एक अच्छा विकल्प हो सकता है जब आपका ऐप अग्रभूमि में है या पृष्ठभूमि में ज्यादा नहीं रहता है (हालांकि 100% जोखिम मुक्त नहीं है)।

एक विकल्प के रूप में, आप डेटा को SharedPreferences में सहेज सकते हैं, या यदि आपका ऑब्जेक्ट अधिक जटिल है, तो उसे database में सहेजें।

उदाहरण के लिए Application, प्लस SharedPreferences दोनों का उपयोग करने का एक और विकल्प होगा। पहले चर को Application उदाहरण से पुनर्प्राप्त करने का प्रयास करें, यदि चर शून्य है, तो इसे SharedPreferences से पुनर्प्राप्त करें।

+0

आपके उत्तर के लिए धन्यवाद। मुझे लगता है कि मैं संकर दृष्टिकोण के लिए जाऊंगा। जब यह टालने योग्य है तो मैं डिस्क से डेटा पढ़ने का बड़ा प्रशंसक नहीं हूं। – Teovald

7

सिंगलटन दृष्टिकोण का उपयोग करना वास्तव में एक बुरा विचार नहीं है, लेकिन बहु-थ्रेडेड वातावरण में उपयोग किए जाने पर मामलों में परेशानी हो सकती है जहां एक धागा एक चर के लिए एक मान निर्धारित करता है और अन्य धागा ओवर-लिख सकता है बिना किसी सूचना के मूल्य।

हालांकि, ताकि आवेदन स्तर उदाहरणों रखने के लिए/चर, यह करने का सुझाव दिया हैApplication वर्ग का विस्तार करने और डिफ़ॉल्ट के रूप में अपने AndroidManifest.xml में परिभाषित। चूंकि एप्लिकेशन का संदर्भ केवल एक बार (जब तक कि एप्लिकेशन चालू नहीं होता है और स्मृति में रहता है) जब आप उस एप्लिकेशन को लॉन्च करते हैं, तो आप उस कक्षा के अंदर कुछ चर परिभाषित कर सकते हैं ताकि वे सार्वजनिक तरीकों का उपयोग करके अपने एप्लिकेशन के कोड में कहीं भी उपलब्ध हो सकें।

इसके अलावा, आप अपने आवेदन वर्ग का उपयोग सिंगलटन के रूप में भी कर सकते हैं, क्योंकि इसकी लॉन्च होने पर केवल एक बार बनाई जाने की गारंटी है।

+0

मैंने सिंगलटन दृष्टिकोण का उपयोग किया और यह मेरे लिए बहुत अच्छा काम करता था। हालांकि, जैसा कि आपने कहा था, बहु थ्रेडेड वातावरण में सावधान रहें। –