2012-09-17 17 views
5

मुझे आश्चर्य है कि कोई भी गतिशील रूप से नियंत्रण बनाने के लिए सर्वोत्तम अभ्यास के रूप में कुछ अंतर्दृष्टि निकाल सकता है (फुटेज बनाम तत्काल)।एंड्रॉइड में नियंत्रण को बढ़ाने या त्वरित करने के लिए बेहतर है?

बढ़:

TextView styledText = (TextView)inflater.inflate(R.layout.styledTextView); 

का दृष्टांत:

TextView styledText = new TextView(mContext); 
styledText.setTextAppearance(R.style.StyledTextStyle); 

वस्तु बनाया जा रहा है या तो फुलाया एक्सएमएल फ़ाइल में विशेषताओं को शामिल कर सकते हैं, या एक शैली परिभाषा जो instantiated वस्तु में जोड़ा जाता है में शामिल किया बाद में। (मान लें कि इस स्टाइल में चौड़ाई, पृष्ठभूमि, टेक्स्ट रंग इत्यादि शामिल हैं)।

प्रत्येक विधि के किसी भी समय/मेमोरी परीक्षण चलाने में सक्षम नहीं है, यह सोच रहा था कि क्या कोई जानता है कि सबसे तेज़/सबसे कुशल था।

+0

एक दिलचस्प नोट। जबकि पाठ उपस्थिति विधि TextViews के साथ काम करेगी, यह गैर-पाठ दृश्यों (बटन, लीनियरलाउट्स, आदि) के साथ नहीं होगी। – Adam

उत्तर

10

लेआउट इन्फ्लूटर में मामूली ओवरहेड है क्योंकि इसे ऑब्जेक्ट बनाने के लिए xml को पार्स करना है। यह अस्थायी रूप से उसी कारण से अधिक स्मृति लेता है। इसके अलावा, यह व्यू ऑब्जेक्ट को वैसे ही बनाता है जैसा आप वैसे भी करेंगे। यह चिंता करने के लिए कुछ हो सकता है कि अगर आप इसे किसी कारण से सैकड़ों बार एक सेकेंड कहते हैं। 99.9% समय हालांकि आप कभी अंतर नहीं जानेंगे।

यह भी ध्यान दें कि किसी भी विधि जो "setTextAppearance" जैसे xml संसाधन को स्वीकार करती है, वही एक्सएमएल पार्सिंग ओवरहेड होगी। आपके द्वारा प्रदान किए गए उदाहरणों में एकमात्र अंतर यह है कि यह TextView xml को पार्स नहीं कर रहा है, लेकिन इसे अभी भी शैली विशेषताओं को पार्स करना होगा।

0

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

जब मैं inflate दृष्टिकोण का उपयोग करता हूं, तो छविबटन संदर्भ पर मौजूद था।

तो मेरे मामले में:

वर्क्स :)

LayoutInflater inflater = LayoutInflater.from(getActivity()); 
    CardView myCardView = (CardView) inflater.inflate(R.layout.my_cardview, null); 
    ImageView icon = (ImageView) myCardView.findViewById(R.id.iconId); 

~~~~~~~~~~~~

:(काम मत करो .. परिवर्तनीय आइकन इस मामले में शून्य है

कार्डव्यू myCardView = new Ca rdView (getActivity());

छवि दृश्य आइकन = (छवि दृश्य) myCardView.findViewById (R.id.iconId);

+1

मान लें कि कार्डव्यू आपके द्वारा बनाए गए कस्टम व्यू नहीं है। मुझे लगता है कि यह स्पष्ट है कि आपका दूसरा दृष्टिकोण आइकन पुनर्प्राप्त करने में सक्षम क्यों नहीं था। आपके लेआउट में इसके अंदर आइकन है, और inflater इसे बनाता है, और दूसरा दृष्टिकोण आप केवल खाली कार्डव्यू को तुरंत चालू कर रहे हैं। भविष्य में इस प्रश्न में जो भी ठोकर खा रहा है, उसके लिए सिर्फ एक टिप्पणी छोड़ दें। – LeoFarage

+0

मान लें कि कार्डव्यू आपके द्वारा बनाए गए कस्टम व्यू नहीं है। मुझे लगता है कि यह स्पष्ट है कि आपका दूसरा दृष्टिकोण आइकन पुनर्प्राप्त करने में सक्षम क्यों नहीं था। आपके लेआउट में इसके अंदर आइकन है, और inflater इसे बनाता है, और दूसरा दृष्टिकोण आप केवल खाली कार्डव्यू को तुरंत चालू कर रहे हैं। भविष्य में इस प्रश्न में जो भी ठोकर खा रहा है, उसके लिए सिर्फ एक टिप्पणी छोड़ दें। – LeoFarage