2014-04-29 3 views
5

से Android डेवलपर ब्लॉग लेख Multithreading For Performance में, convertViewImageView की एक सूची है, जो HttpRequest.Yet के माध्यम से डाउनलोड कर रहे हैं प्रदर्शित करने के लिए Adapter.getItem() में प्रयोग किया जाता है, मैं भी कुछ एंड्रॉयड ट्यूटोरियल कि convertView का उपयोग नहीं करते देखते हैं, और बस एक नई हवा भरना Adapter.getItem() में देखें।एंड्रॉइड कन्वर्ट व्यू, इसका इस्तेमाल करने के लिए या नहीं?

मुझे आश्चर्य है कि convertView का उपयोग करने का क्या फायदा है? यह प्रयुक्त दृश्य को रीसायकल कैसे करता है? उपयोग किए गए दृश्य कैश किए जाते हैं?

मैं इस सवाल से पूछता हूं क्योंकि मैंने अपनी परियोजना में convertView का उपयोग नहीं किया है और मैं इसका उपयोग न करने के लिए लागत जानना चाहता हूं। नीचे छवियों की एक सूची दृश्य का मेरा कार्यान्वयन है।

convertView का उपयोग करने के बजाय, मैं Adapter.getItem() में एक नया दृश्य फुलाता हूं। इसके अलावा, मैं listView के प्रत्येक आइटम में कर्मचारियों को पकड़ने के लिए एक रैपर वर्ग बनाता हूं। एक बार छवि डाउनलोड हो जाने के बाद, इसे प्रत्येक सूची आइटम के लिए रैपर वर्ग में बिटमैप के रूप में संग्रहीत किया जाएगा (छवि छोटी है)। इस तरह, मैं एक ही छवि के डुप्लिकेट डाउनलोडिंग से बच सकता हूं। और यह Multithreading For Performance में बात की गई दौड़ की स्थिति के मुद्दों से भी बचता है। लेकिन मैं अभी भी थोड़ा चिंतित हूं, क्या कोई ऐसी समस्या है जो मेरी विधि का उपयोग करके अच्छा नहीं है?


FYI करें: लेख @Carl एंडरसन द्वारा सिफारिश कैसे convertView अनुकूलक में काम करता है के बारे में जानकारी देता है। इस लेख में सुझाए गए रोमैन गाय द्वारा Google आईओ एक और अच्छा संदर्भ है।

एक शब्द में, कन्वर्ट व्यू का उपयोग करके अंतरिक्ष और समय दोनों अनुकूलित होते हैं। इसके अलावा, मैंने अपनी खुद की छवि डाउनलोडर को छोड़ दिया है और पिकासो का उपयोग किया है जिसे @ कॉमन्सवेयर द्वारा अनुशंसित किया गया है। यह एक सम्मोहन की तरह काम करता है।

उत्तर

7

convertView का पुन: उपयोग करने में समस्या यह है कि, जैसा कि आपने कहा था, आप प्रत्येक View को बनाते और बढ़ाते हैं जब उपयोगकर्ता एक पंक्ति को देखने में स्क्रॉल करता है। मौजूदा विचारों का पुन: उपयोग करने की तुलना में दृश्य बनाना और फुला देना एक बड़ी मात्रा है, और आप निश्चित रूप से इसके लिए प्रदर्शन हिट का भुगतान कर रहे हैं।

मेरा ऐप कुछ समान करता है - यह ListView में पंक्तियों के अंदर ImageViews का उपयोग करता है, और उन छवि दृश्य पृष्ठभूमि में डाउनलोड की गई छवियों द्वारा पॉप्युलेट किए जाते हैं। थ्रेडिंग बग में मेरी जांच के हिस्से के रूप में, मैंने दृश्यों का पुन: उपयोग बंद कर दिया, और जब मैंने ऐसा किया तो प्रदर्शन बिल्कुल भयानक था। ListView कोड को पुन: उपयोग के लिए अनुकूलित किया गया है, और यदि आप उस तक नहीं पहुंचते हैं, तो आपकी फ़्रेमेट और उपयोगिता भुगतनी होगी। http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

2

मैं कुछ एंड्रॉइड ट्यूटोरियल भी देखता हूं जो कन्वर्ट व्यू का उपयोग नहीं करते हैं, और एडाप्टर.getItem() में बस एक नया दृश्य बढ़ाते हैं।

यह एक अच्छा संकेत नहीं है।

मुझे आश्चर्य है कि कनवर्ट व्यू का उपयोग करने का क्या फायदा है?

यह CPU समय बचाता है और ढेर में कम कचरा उत्पन्न करता है।

यह उपयोग किए गए दृश्य को रीसायकल कैसे करता है?

यह उपयोग किया गया दृश्य है।

उपयोग किए गए दृश्य कैश किए गए हैं?

AdapterView में।

मैं इस सवाल से पूछता हूं क्योंकि मैंने अपने प्रोजेक्ट में कन्वर्ट व्यू का उपयोग नहीं किया है और मैं इसका उपयोग नहीं करने के लिए लागत जानना चाहता हूं।

ठीक है, आपने अपने एडाप्टर को कैसे लिखा है, इस पर निर्भर करता है कि आपको अपने सुपरक्लास से पंक्ति मुक्त "रीसाइक्लिंग" मिल रहा है।

नीचे सूची का मेरा कार्यान्वयन छवियों का दृश्य है।

आपके प्रश्न में कोई कोड नहीं है।

कन्वर्ट व्यू का उपयोग करने के बजाय, मैं एडाप्टर.getItem() में एक नया दृश्य फुलाता हूं।

केवल ऐसा करें यदि convertViewnull है। अन्यथा, convertView का उपयोग करें। यह एक if/else निर्माण लेता है।

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

मुझे समझ में नहीं आता कि आप छवि को कहां डाउनलोड कर रहे हैं। कई, कई पुस्तकालय हैं जो आपके लिए यह करते हैं, और एक का उपयोग आमतौर पर अपना कोड रोल करने से बेहतर विचार है। मुझे इसके लिए Picasso और Ion पसंद है, लेकिन अन्य भी हैं।

लेकिन मैं अभी भी थोड़ा चिंतित हूं, क्या कोई ऐसी समस्या है जो मेरी विधि का उपयोग करके अच्छा नहीं है?

जो मैंने सूचीबद्ध किया है उससे कहीं अधिक हो सकता है, लेकिन किसी भी कोड को देखे बिना, यह अनुमान लगाना मुश्किल है कि क्या अच्छा नहीं हो सकता है।

1

convertView आइटम सिर्फ एक सहायक दृश्य है, हालांकि एक बहुत ही महत्वपूर्ण एक है, जिसे आप बनाना कम दृश्य में मदद करता है:

इस लिंक पढ़ना भी मुझे बहुत बेहतर कैसे listviews काम समझने में मदद की।

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

इसके बजाय जब आप कनवर्ट व्यू का उपयोग करते हैं तो आप सिस्टम को कम दृश्य बनाने में मदद करते हैं, क्योंकि यह आपको सिस्टम को पहले से बनाए गए दृश्यों का पुन: उपयोग करने की क्षमता देता है लेकिन यह उपयोगकर्ता के लिए दृश्यमान नहीं है, इसलिए आपको इसकी सामग्री को बदलने की आवश्यकता है प्रत्येक आइटम के लिए एक नया दृश्य बनाना।

convertView का उपयोग नहीं अपने listviews

0

स्क्रॉल जब सबसे बुनियादी तरीका में convertView का उपयोग करना है बस विचारों रीसाइक्लिंग के बजाय नए विचारों हर बार बनाने के लिए दृश्य की जरूरत है अगर आपके सूचीदृश्य कभी नहीं इसलिए, अंतराल के लिए एक आम कारण है नुकसान यह है कि आपको इसे लागू करने की आवश्यकता नहीं हो सकती है जैसे कि लगभग 3-4 विचारों की एक संक्षिप्त सूची। लेकिन यह अच्छा अभ्यास है this google I/o प्रस्तुति

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