यहाँ एक अधिक विस्तृत विवरण दिया गया है:
कोरियोग्राफर ऐप्स को खुद को vsync से कनेक्ट करने देता है, और परफॉर्मेंस को बेहतर बनाने के लिए सही समय पर चीजें देता है।
एंड्रॉइड दृश्य एनिमेशन आंतरिक रूप से एक ही उद्देश्य के लिए कोरियोग्राफर का उपयोग करता है: एनिमेशन को ठीक से समय देने और संभवतः प्रदर्शन में सुधार करने के लिए।
चूंकि कोरियोग्राफर को प्रत्येक vsync घटनाओं के बारे में बताया जाता है, इसलिए मैं बता सकता हूं कि क्या कोरियोग्राफर में से कोई एक रनवेबल्स पारित हो गया है। * एपिस एक फ्रेम के समय में खत्म नहीं होता है, जिससे फ्रेम को छोड़ दिया जाता है।
मेरी समझ में कोरियोग्राफर केवल फ्रेम स्किपिंग का पता लगा सकता है। यह बताने का कोई तरीका नहीं है कि ऐसा क्यों होता है।
संदेश "आवेदन अपने मुख्य धागे पर बहुत अधिक काम कर सकता है।" भ्रामक हो सकता है।
स्रोत:
लॉगकोट में कोरियोग्राफर संदेशों का अर्थ
आपको क्यों चिंतित होना चाहिए
जब यह संदेश एंड्रॉइड एमुलेटर पर पॉप अप हो जाता है और स्किड किए गए फ़्रेम की संख्या काफी कम हो जाती है (<100) तो आप एमुलेटर के सुरक्षित होने की शर्त को धीमा कर सकते हैं - जो लगभग हर समय होता है। लेकिन अगर फ़्रेम की संख्या कम और बड़ी हो गई है और 300+ के क्रम में है, तो आपके कोड के साथ कुछ गंभीर परेशानी हो सकती है। एंड्रॉइड डिवाइस आईओएस और विंडोज डिवाइस के विपरीत हार्डवेयर की एक विशाल सरणी में आते हैं। रैम और सीपीयू भिन्न होता है और यदि आप सभी उपकरणों पर एक उचित प्रदर्शन और उपयोगकर्ता अनुभव चाहते हैं तो आपको इस चीज को ठीक करने की आवश्यकता है। जब फ़्रेम को छोड़ दिया जाता है तो यूआई धीमा और सुस्त होता है, जो कि एक वांछनीय उपयोगकर्ता अनुभव नहीं है।
इसे कैसे जोड़ेंगे
इसे ठीक करने के लिए नोड्स की पहचान करने की आवश्यकता होती है जहां प्रसंस्करण की लंबी अवधि हो सकती है। सबसे अच्छा तरीका सभी प्रसंस्करण करना है चाहे वह मुख्य यूआई थ्रेड से अलग थ्रेड में कितना भी छोटा या बड़ा हो। तो क्या यह डेटा फॉर्म SQLite डेटाबेस तक पहुँच सकता है या कुछ कट्टर गणित कर रहा है या किसी सरणी को सॉर्ट कर रहा है - इसे एक अलग धागे में करें
अब यहाँ एक पकड़ है, आप इन ऑपरेशनों को करने के लिए एक नया थ्रेड बनाएंगे और जब आप अपना एप्लिकेशन चलाएंगे, तो यह कहते हुए क्रैश हो जाएगा कि "केवल ओरिजिनल थ्रेड जिसने व्यू पदानुक्रम बनाया है, वह अपने विचारों को छू सकता है"। आपको इस तथ्य को जानना होगा कि एंड्रॉइड में यूआई को मुख्य धागे या यूआई थ्रेड द्वारा ही बदला जा सकता है। कोई अन्य धागा जो ऐसा करने का प्रयास करता है, विफल हो जाता है और इस त्रुटि के साथ क्रैश हो जाता है। आपको जो करने की आवश्यकता है वह रनऑन यूट्रेड के अंदर एक नया रननेबल बनाने के लिए है और इस रननेबल के अंदर आपको यूआई से जुड़े सभी ऑपरेशन करने चाहिए। एक उदाहरण यहां देखें ।
तो हमारे पास थ्रेड और रननेबल मुख्य थ्रेड से डेटा प्रोसेसिंग के लिए है, और क्या है? Android में AsyncTask है जो UI थ्रेड पर लंबे समय तक प्रक्रिया करने में सक्षम बनाता है। यह सबसे उपयोगी है जब आप अनुप्रयोग डेटा संचालित या वेब एपीआई संचालित होते हैं या कैनवस का उपयोग करते हुए जटिल यूआई की तरह उपयोग करते हैं। AsyncTask की शक्ति वह है जो पृष्ठभूमि में चीजों को करने की अनुमति देता है और एक बार जब आप प्रसंस्करण कर रहे होते हैं, तो आप बस यूआई पर आवश्यक कार्रवाई कर सकते हैं, बिना किसी लागिंग प्रभाव के। यह संभव है क्योंकि AsyncTask, गतिविधि के UI थ्रेड से स्वयं प्राप्त करता है - आपके द्वारा UI पर AsyncTask के माध्यम से किए गए सभी ऑपरेशन मुख्य UI थ्रेड से एक अलग थ्रेड है, उपयोगकर्ता सहभागिता में कोई बाधा नहीं है।
तो यह वही है जो आपको Android अनुप्रयोगों को सुचारू बनाने के लिए जानना चाहिए और जहाँ तक मुझे पता है कि प्रत्येक शुरुआत करने वाले को यह संदेश उसके कंसोल पर मिलता है।