2013-07-17 12 views
5

मुझे कुछ बुनियादी सामानस्थिर चर का कुशलतापूर्वक उपयोग कैसे करें?

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

मैं उदाहरण के लिए अपने आवेदन में स्थिर चर का उपयोग करने के लिए सबसे अच्छा उपाय है जानना चाहते मैं एक वैश्विक वर्ग जो मैं भंडार कुछ स्थैतिक चर में जैसा कि इसके नाम इन मूल्यों का आकलन किया और विभिन्न गतिविधियों, रूप से संशोधित किया गया होगा इंगित करता है एक उदाहरण मैं एक स्थिर चर चौड़ाई है और वर्तमान में इस

Global.WIDTH = 12

है जैसे कि यह अपडेट करने या की तरह int width = Global.WIDTH विभिन्न गतिविधियों से यह मिलता है, यह एक सही तरीका है या मैं एक स्थिर का उपयोग करने की क्या ज़रूरत है पाने के लिए विधि int width = Global.getWidth(); तरह चौड़ाई, तो क्या इन के दोनों के बीच का अंतर, यह करने के लिए सबसे अच्छा तरीका क्या है,

क्या अन्य महत्वपूर्ण बातें हम ध्यान में रखना है जब स्थैतिक चर के साथ काम कर रहे हैं क्या है?

आप सभी और खेद का विस्तृत वर्णन के लिए धन्यवाद ...

+0

'स्थिर' का उपयोग करें जब फ़ील्ड/विधि कक्षा से संबंधित हो, न कि किसी ऑब्जेक्ट संदर्भ के लिए। यदि 'गतिविधि' में उपयोग किया जाता है, तो मैं मैदान को एक स्पष्ट जंगली 'स्थैतिक' क्षेत्र के बजाय स्थिर के रूप में घोषित करने के लिए 'स्थिर अंतिम' का उपयोग करने की अनुशंसा करता हूं। –

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद .. मैं इसे अंतिम रूप में घोषित नहीं कर सकता क्योंकि इसकी मान गणना के अनुसार डिवाइस के अनुसार बदल जाएगी –

+1

आप इसे 'स्थैतिक अंतिम' के रूप में घोषित कर सकते हैं और 'स्थिर {}' विधि में मानों को परिभाषित कर सकते हैं। ध्यान दें कि इन मानों को * डायनामिक * होने पर भी, * * को आपके एप्लिकेशन में केवल एक बार लोड किया जाना चाहिए, एप्लिकेशन के किसी भी समय नहीं। यदि आप लैंडस्केप विज़ुअलाइज़ेशन के लिए अलग-अलग चौड़ाई और ऊंचाई चाहते हैं, तो मानों को फिर से समझने के बजाय दो और फ़ील्ड जोड़ें। –

उत्तर

1

स्थैतिक चर मेमोरी लीक का कारण है क्योंकि वे क्षेत्र से बाहर कभी नहीं जाना होगा, लेकिन आप केवल इस तरह के पूर्णांक या लंबे समय के रूप में कुछ पुरातन है, तो कर सकते हैं तो आपको कोई समस्या नहीं होगी।

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

आपके प्रश्न में वैरिएबल, संभवतः एक int, ठीक है हालांकि।

+0

उत्तर के लिए निक धन्यवाद, मैंने उदाहरण के लिए int का उपयोग किया, मुझे पता है कि स्थिर फ़ील्ड और स्थिर तरीकों के उपयोग के बीच कोई अंतर है –

+1

मैं स्थिर तरीकों का उपयोग करने के साथ किसी भी स्मृति प्रभाव के बारे में नहीं सोच सकता । Global.width और Global.getWidth() के बीच एकमात्र अंतर यह है कि विधि आपको कॉल किए जाने वाले मूल्य की गणना करने की अनुमति देगी। विधि में घोषित और उपयोग किए जाने वाले किसी भी चर मेमोरी रिसाव का कारण नहीं बनेंगे क्योंकि जैसे ही विधि समाप्त होती है, वे गुंजाइश से बाहर जाते हैं। – NickJ

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