2011-06-30 18 views
23

क्या एएनआर एक अपवाद है, एक त्रुटि है या क्या? क्या हम वास्तव में try{} catch(){} संरचना में इसे पकड़ सकते हैं?क्या "एएनआर" एक अपवाद या त्रुटि है या क्या?

+1

आप क्या मंच आप उपयोग कर रहे उल्लेख करना भूल गया। –

+0

"आई/कोरियोग्राफर (xxx) के लिए देखो: छोड़ा गया xxx फ्रेम! एप्लिकेशन अपने मुख्य धागे पर बहुत अधिक काम कर रहा है।" आपके लॉगकैट में इससे आपको आपकी समस्या मिल सकती है। – Christ

+0

ऐसा लगता है कि यह 'क्या' है – Kirby

उत्तर

44

एएनआर (आवेदन प्रतिक्रिया नहीं दे रहा है) बिल्कुल एक त्रुटि नहीं है। यह दिखाया जाता है कि आपका आवेदन बहुत आलसी है और जवाब देने में काफी समय लगता है, इस प्रकार उपयोगकर्ता को प्रतीक्षा करनी पड़ती है। यदि आपका एप्लिकेशन उन्हें लंबे समय तक प्रतीक्षा करता है तो उपयोगकर्ता सराहना नहीं करेगा। इसलिए, एंड्रॉइड फ्रेमवर्क उपयोगकर्ता को आपके एप्लिकेशन को बंद करने का विकल्प देता है। http://developer.android.com/guide/practices/design/responsiveness.html

ऐसा तब होता है जब आप मुख्य धागे पर लंबे समय तक चल रहे संचालन कर रहे होते हैं। मुख्य थ्रेड अवरुद्ध होने के बाद से सिस्टम इस अवधि के दौरान उपयोगकर्ता इंटरैक्शन को संसाधित नहीं कर सकता है। समाधान एक कार्यकर्ता धागे में भारी संचालन करना है और मुख्य धागे को मुक्त रखना है।

2

आवेदन (ANR) संवाद

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

एक एप्लिकेशन जो उपयोगकर्ता इंटरैक्शन के लिए जल्दी प्रतिक्रिया नहीं देता है, उत्तरदायी नहीं होगा- कुछ सौ मिलीसेकंड देरी से अधिक कुछ भी ध्यान देने योग्य है। यह ऐसी दुर्भावनापूर्ण समस्या है कि एंड्रॉइड प्लेटफार्म उपयोगकर्ताओं को उन अनुप्रयोगों से बचाता है जो मुख्य धागे पर बहुत अधिक करते हैं।

सूचना: किसी ऐप्लिकेशन fve सेकंड के भीतर उपयोगकर्ता इनपुट का जवाब नहीं है

हैं, तो उपयोगकर्ता आवेदन प्रतिसाद नहीं दे (ANR) संवाद और अनुप्रयोग से बाहर करने के लिए विकल्प की पेशकश की जाएगी देखेंगे।

निम्नलिखित स्क्रीनशॉट एक ठेठ एंड्रॉयड ANR संवाद दिखाता है:

enter image description here

एंड्रॉयड सिंक्रनाइज़ करने के लिए यूजर इंटरफेस हार्डवेयर-ताज़ा दर के साथ redraws मेहनत करती है। इसका मतलब है कि इसका लक्ष्य 60 फ्रेम प्रति सेकेंड की दर से फिर से निकालना है- यह केवल 16.67 एमएस प्रति फ्रेम है। यदि हम मुख्य धागे पर काम करते हैं जो को 16 एमएस के करीब कहीं भी लेता है, तो हम फ्रेम दर को प्रभावित करने का जोखिम उठाते हैं, जिसके परिणामस्वरूप जंक-स्टटरिंग एनिमेशन, झटकेदार स्क्रॉलिंग आदि शामिल हैं।

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

नोटिस:

एंड्रॉयड प्रत्येक डिवाइस पर डेवलपर विकल्प में एक उपयोगी सख्त मोड सेटिंग प्रदान करता है, जो होगा fl स्क्रीन पर राख जब अनुप्रयोग मुख्य थ्रेड पर लंबे समय से चल कार्रवाई।

इसके अलावा सुरक्षा के लिए एक नया अपवाद वर्ग, NetworkOnMainThreadException, RuntimeException का एक उपवर्ग कि इस प्रणाली का पता लगाता है, तो नेटवर्क गतिविधि मुख्य थ्रेड पर शुरू की फेंक दिया जाता है की शुरूआत के साथ हनीकोम्ब में मंच (एपीआई स्तर 11) को जोड़ा गया है ।

स्रोत:

अतुल्यकालिक एंड्रॉयड प्रोग्रामिंग - द्वितीय संस्करण - हेल्डर वास्कोनसेलोस - जुलाई वर्ष 2016