2011-10-26 13 views
5

एक टुकड़े में आपको गतिविधि के संदर्भ की आवश्यकता होने पर या वैश्विक चर 'mActivity' बनाने के लिए हर बार getActivity() को कॉल करना चाहिए और इसका उपयोग करना चाहिए।एंड्रॉइड और ओओपी - ग्लैग वेरिएबल्स बनाम फ्रैगमेंट्स में विरासत प्राप्तकर्ता

असल में आपके पास पहले से ही एक गतिविधि ऑब्जेक्ट (getActivity()) है और ऐसा लगता है कि वैश्विक (एमएक्टिविटी) बनाना कोड डुप्लिकेशन है और एक अतिरिक्त संदर्भ है जो अनियंत्रित है। लेकिन भी getActivity() का उपयोग करके हर जगह भयभीत दिखता है और हर बार कई विधि कॉल (प्रदर्शन?) करने में गलत लगता है।

// Pseudo Android 
public class MyFragent extends Fragment { 

     private Activity mActivity; // Global 

     public void onActivityCreated(Bundle b){ 

      mActivity = getActivity(); 

     } 

     public void onClick(View v){ 

     randomMethodTakingActivity(mActivity); 
     // or 
     randomMethodTakingActivity(getActivity()); 

     } 

     private void someMethod(){ 
     randomMethodTakingActivity(mActivity); 
     // or 
     randomMethodTakingActivity(getActivity()); 
     } 

     private void anotherMethod(){ 
     mActivity.someCallback(); 
     // or 
     getActivity().someCallback(); 
     } 

} 

यह getAplication() या getView() के लिए भी प्रासंगिक होगा;

मैंने Coding for Performance के माध्यम से पढ़ा है लेकिन कुछ भी प्रासंगिक नहीं देख सकता है। मुझे ओओ प्रकृति और प्रदर्शन (हालांकि शायद नगण्य) पर कुछ प्रतिक्रिया चाहिए।

उत्तर

6

एक टुकड़े में जब आप गतिविधि के संदर्भ की आवश्यकता होती है या वैश्विक चर 'mActivity' बनाते हैं और इसका उपयोग करते हैं तो आपको getActivity() को कॉल करना चाहिए।

कॉल getActivity()। स्टार्टर्स के लिए, यदि आप setRetainInstance(true) का उपयोग कर रहे हैं, तो आपका वैकल्पिक दृष्टिकोण बस गलत है - कॉन्फ़िगरेशन परिवर्तन के बाद आप गलत Activity पर इंगित करेंगे।

यह एक वैश्विक (mActivity) बनाने की तरह लगता है कोड दोहराव और एक अतिरिक्त संदर्भ कि अनावश्यक है

बिल्कुल पैदा हो गई।

getActivity का उपयोग कर() हर जगह भयंकर लग रहा है

आप निश्चित रूप से कर रहे हैं आपकी राय का स्वागत है।

कई विधि कॉल के लिए हर बार कर गलत लगता है (प्रदर्शन?)

आप एक तंग पाश में यह एक लाख बार कॉल करेंगे, तो एक अस्थायी कैश के लिए एक स्थानीय चर पैदा करते हैं। अन्यथा, प्रदर्शन हिट सामग्री नहीं होनी चाहिए।

या, इसे देखने का एक और तरीका, अगर ट्रेसेव कहता है कि आप getActivity() पर कॉल करने में बहुत अधिक समय व्यतीत कर रहे हैं, तो इसके बारे में चिंता करें।

+0

अभिविन्यास परिवर्तन के लिए getActivity() के लाभ अब देख सकते हैं। क्या आपके पास getView() पर कोई राय है? , टीभ शायद अब उनके लिए संयम के लिए विधि कॉल कर देगा, इनपुट के लिए धन्यवाद। – Blundell

+0

@ ब्लंडेल: "क्या आपके पास getView() पर कोई राय है?" - आम तौर पर, मैं अंतर्निहित तरीकों का उपयोग करता हूं जब तक कि मेरे पास अन्यथा करने के लिए स्पष्ट और वर्तमान कारण नहीं है (उदाहरण के लिए, मिलियन-पास लूप)। – CommonsWare

+0

'अन्यथा, प्रदर्शन हिट सामग्री नहीं होनी चाहिए।' बस !! –

0

क्या आप जीओएफ (चार गिरोह) डिजाइन पैटर्न के बारे में जानते हैं? मुझे लगता है कि आपकी समस्या फैक्टरी विधि पैटर्न में पहले ही हल हो गई है।

+0

मुझे नहीं लगता कि फैक्टरी डिजाइन पैटर्न यहां प्रासंगिक है। आप फैक्ट्री में क्या जाने की उम्मीद करेंगे? और फिर आवेदन वापस करें? – Blundell

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