2013-03-10 5 views
8

के putExtra विधि का उपयोग करें मेरे पास प्रदर्शन के बारे में एक सामान्य प्रश्न है, और मुझे किसके बारे में करना चाहिए और जिसका मुझे उपयोग नहीं करना चाहिए। मैं वास्तव में अपने ऐप में दो गतिविधियों का उपयोग कर रहा हूं, आइए हम "द फर्स्ट" और "सेकेंड" गतिविधि को कॉल करें।सार्वजनिक स्थैतिक चर या इरादा वर्ग

सबसे पहले गतिविधि में मेरे पास सार्वजनिक स्थिर वस्तु है, मेरे मामले में, यह मेरे द्वारा बनाई गई एक कस्टम ऑब्जेक्ट की एक सूची है, जिसे संयोजन कहा जाता है।

जब मैं सेकेंड गतिविधि को कॉल करता हूं तो मैं इस सूची की सामग्री प्राप्त करना चाहता हूं। तो क्या मुझे सार्वजनिक स्थैतिक चर का उपयोग करना चाहिए? कोई दिक़्क़त है क्या? पहली गतिविधि का केवल एक उदाहरण होगा? तो सार्वजनिक स्थैतिक चर का उपयोग कर कोई समस्या नहीं है ..? मेरा अनुमान।

या क्या मुझे पूरी सूची की गणना करनी चाहिए और जानकारी को एक बड़ी स्ट्रिंग पर रखना चाहिए और इसे PutExtra विधि का उपयोग कर सेकेंड गतिविधि में भेजना चाहिए?

एक इस पर अच्छा स्पष्टीकरण बहुत अच्छा होगा और मैं वास्तव में यह :)

+2

सिंगलटन पैटर्न का उपयोग सार्वजनिक स्थिर क्षेत्रों की तुलना में सामान्य रूप से बेहतर है। –

उत्तर

11

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

स्टेटिक वेरिएबल्स क्लास ऑब्जेक्ट्स द्वारा संदर्भित हैं जिन्हें क्लासलोडर्स द्वारा संदर्भित किया जाता है- इसलिए जब तक क्लासलोडर क्लास को किसी भी तरह से छोड़ देता है या क्लासलोडर स्वयं कचरा संग्रह के लिए योग्य हो जाता है तो स्थैतिक चर कचरा नहीं होगा। इसलिए यदि आप उन वर्गों के कई वर्गों में संदर्भित स्थैतिक चर का उपयोग कर रहे हैं और जिसमें एक स्थिर चर घोषित किया गया है तो कचरा संग्रह नहीं किया जा सकता है जब तक कि वे वर्ग कचरा संग्रह के लिए उपलब्ध न हों। तो इससे मेमोरी लीक की ओर बढ़ने वाली ढेर मेमोरी बढ़ जाती है।

मैं प्राइमेटिव प्रकारों के लिए पुएक्स्ट्रा का उपयोग करने की सलाह देता हूं। सिंगलटन का उपयोग करने में आपके मामले में मदद करनी चाहिए।

इस वीडियो में लड़का इस बारे में बात करता है कि स्थैतिक चर का उपयोग क्यों नहीं किया जाना चाहिए और मेमोरी लीक से कैसे बचें। http://www.youtube.com/watch?v=_CruQY55HOk। आदमी मेमोरी लीक की जांच के लिए मैट विश्लेषक का उपयोग करने के बारे में बात करता है।

इसके अलावा इस लिंक को देखें। http://developer.android.com/guide/faq/framework.html। शीर्षक के तहत विवरणों पर एक नज़र डालें * मैं एक ही आवेदन के भीतर क्रियाकलाप/सेवाओं के बीच डेटा कैसे पास करूं?

+1

उस अंतिम लिंक में बहुत अच्छी जानकारी है, इसे साझा करने के लिए धन्यवाद। अब मैं putExtra का उपयोग कर रहा हूं, मैं स्ट्रिंग की गणना करता हूं, फिर मैंने स्ट्रिंग को PutExtra का उपयोग करके रखा, और फिर मैं गतिविधि को कॉल करता हूं। मुझे लगता है कि यह अब के लिए एक अच्छा समाधान है :) धन्यवाद दोस्त;) – TiagoM

+1

खुशी है कि यह आपकी मदद करता है। – Raghunandan

1

सार्वजनिक स्थिर है नहीं एक अच्छा विचार की सराहना करेंगे। कुछ मामलों में सिस्टम द्वारा "सबसे पहले" गतिविधि समाप्त हो सकती है। इसके माध्यम से प्राप्त करें: Activity Lifecycle आपकी मदद कर सकता है कि गतिविधि कैसे काम करती है।

बेहतर उपयोग putExtra वास्तव में एक स्ट्रिंग के रूप में नहीं बल्कि पर्सेलटेबल या सीरियलज़ेबल ऑब्जेक्ट के लिए putExtra को भी देखें। see here for serializable

+0

एसिटीवी लाइफसाइक्ल में अच्छी जानकारी का एक गुच्छा है, मैं बस उस पर एक चुपके देखता हूं, और बहुत अच्छा है, बहुत दोस्ताना धन्यवाद;) मैं putExtra का उपयोग कर रहा हूं। धन्यवाद;) – TiagoM

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