प्रत्येक वर्ग जो दृश्य वर्ग से ली गई है invalidate()
और postInvalidate()
विधि है के दौरान तुरंत और न दोबारा बनाई जा सके। यदि invalidate()
कहलाता है तो यह सिस्टम को बताता है कि वर्तमान दृश्य बदल गया है और इसे जितनी जल्दी हो सके को फिर से खींचा जाना चाहिए। इस पद्धति केवल अपने UIThread से कहा जा सकता है के रूप में एक और तरीका है जब आप UIThread में नहीं हैं और अभी भी प्रणाली है कि अपने दृश्य बदल दिया गया है सूचित करना चाहते हैं के लिए आवश्यक है। postInvalidate()
विधि गैर-यूआईटीएचडी से सिस्टम को सूचित करती है और दृश्य को में अगले ईवेंटलोप में जल्द से जल्द UIThread पर फिर से खींचा जाता है।
अपने मामले में आप AsyncTask
(एक बुद्धिमान बैकग्राउंड थ्रेड) की मदद से जो चाहते हैं उसे प्राप्त कर सकते हैं .सिनकटास्क यूआई थ्रेड के उचित और आसान उपयोग को सक्षम बनाता है। यह वर्ग थ्रेड और/या हैंडलर में हेरफेर किए बिना यूआई थ्रेड पर बैकग्राउंड ऑपरेशंस (आपके मामले में पृष्ठभूमि में छवि डाउनलोड करने) की अनुमति देता है और परिणाम प्रकाशित करता है (अपने बिटवैप को अपने इमेज व्यू पर सेट करें)।
एक असीमित कार्य को एक गणना द्वारा परिभाषित किया जाता है जो पृष्ठभूमि धागे पर चलता है और जिसका परिणाम UI थ्रेड पर प्रकाशित होता है। एक अतुल्यकालिक कार्य 3 जेनेरिक प्रकार, पैराम्स, प्रगति और परिणाम कहा जाता है, और 4 चरण, जिसे प्रारंभ, डिनबैकग्राउंड, प्रक्रिया प्रगति और अंत कहा जाता है, द्वारा परिभाषित किया गया है।
4 कदम
जब एक अतुल्यकालिक कार्य निष्पादित किया जाता है, कार्य 4 चरणों के माध्यम से चला जाता है:
onPreExecute()
, यूआई धागा तुरंत बाद कार्य निष्पादित किया जाता है पर लागू। यह चरण सामान्य रूप से कार्य को सेट करने के लिए उपयोग किया जाता है, उदाहरण के लिए क्लाउड से छवि डाउनलोड करने से पहले उपयोगकर्ता इंटरफ़ेस में प्रगति पट्टी दिखाकर और इसका उपयोग अच्छा उपयोगकर्ता अनुभव प्रदान करने के लिए किया जाता है।
doInBackground(Params...)
, PreExecute() निष्पादन समाप्त होने के तुरंत बाद पृष्ठभूमि थ्रेड पर लगाया गया। इस चरण का उपयोग पृष्ठभूमि गणना करने के लिए किया जाता है जिसमें काफी समय लग सकता है। एसिंक्रोनस कार्य के पैरामीटर इस चरण में पास किए जाते हैं। गणना के परिणाम को इस चरण से वापस किया जाना चाहिए और अंतिम चरण में वापस भेज दिया जाएगा। प्रगति की एक या एक से अधिक इकाइयों को प्रकाशित करने के लिए यह चरण प्रकाशन प्रगति (प्रगति ...) का भी उपयोग कर सकता है। इन मानों को UI थ्रेड पर प्रकाशित किया गया है, ऑन प्रोग्रेसअपडेट (प्रगति ...) चरण में।
onProgressUpdate(Progress...)
, publishProgress(Progress...)
पर कॉल के बाद यूआई थ्रेड पर लगाया गया। निष्पादन का समय अपरिभाषित है। पृष्ठभूमि पद्धति अभी भी निष्पादित होने पर इस विधि का उपयोग उपयोगकर्ता इंटरफ़ेस में किसी भी प्रकार की प्रगति को प्रदर्शित करने के लिए किया जाता है।
onPostExecute(Result)
, पृष्ठभूमि गणना समाप्त होने के बाद यूआई थ्रेड पर लगाया गया। पृष्ठभूमि गणना का परिणाम इस विधि में पैरामीटर के रूप में इस चरण में पारित किया गया है, आप अपनी छवि में बिटमैप सेट कर सकते हैं और अपने विचारों को अमान्य कर सकते हैं
पवित्र गाय, यहां एक +1 है – Korcholis