2012-12-02 18 views
6

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

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

एक और मुद्दा यह है कि कई सूत्र मौजूद है जब मैं डी डी एम एस का उपयोग धागे नजर रखने के लिए। ऐसा इसलिए है क्योंकि कई क्रियाकलापों में एक ही लोडिंग तंत्र का उपयोग किया जाता है। मैंने धागे को अपने संदेश लूप को छोड़ दिया है जबकि पॉज़() कहा जाता है, मुझे यकीन है कि उनमें से केवल दो ही जीवित हैं। लेकिन मैं उन सभी को डीडीएमएस में देख सकता हूं। (? Btw, क्यों धागे अभी भी मौजूद हैं मैं दिखाया है धागा = बातिल;)

एक शब्द में

तो, मेरे सवाल यह है: सका एक बाध्य सेवा से इस लदान कार्य लाभ होगा?

उत्तर

1

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

सेवा जब आप कुछ है कि एक यूआई की जरूरत नहीं है करना चाहते हैं के लिए कर रहे हैं। यदि आपको वास्तविक समय में UI को अपडेट करने की आवश्यकता है, तो सेवा बहुत अधिक समझ में नहीं आती है।

+0

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

+0

एक सेवा किसी भी तरह से विशेष नहीं है: यदि आप इसे थ्रेड चलाने के लिए चाहते हैं, तो आपको उन्हें बनाना होगा। आपके मामले के लिए, हो सकता है कि आप एकाधिक (लेकिन बाध्य) लोडिंग थ्रेड प्राप्त कर सकें ताकि आप चीजें तेज़ी से प्राप्त कर सकें। ओपन सोर्स लाइब्रेरीज़ हैं जो ऐसा करते हैं, और आईआईआरसी एओएसपी कोड में कुछ उदाहरण हैं। किसी भी मामले में, यहां सेवा का उपयोग करने की कोई बात नहीं है। –

+0

यहां एक बहुत अच्छा है: https://github.com/novoda/ImageLoader। यदि आप स्रोत की जांच करते हैं तो आप देखेंगे कि यह छोटा नहीं है, और आप इसे पुन: पेश करने की कोशिश करने के बजाय लाइब्रेरी का उपयोग करना चाहेंगे। आपकी सिफारिश के लिए –