2013-11-26 5 views
24

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

क्या कोई मुझे एएनआर (एंड्रॉइड प्रतिसाद नहीं दे रहा है) और एंड्रॉइड में एक क्रैश के बीच अंतर बता सकता है?

उत्तर

67

ANR एक pplication एन OT आर esponding के लिए खड़ा है।

यदि आप यूआई थ्रेड पर एक प्रक्रिया चला रहे हैं तो एक एएनआर तब होगा जब आमतौर पर लगभग 5 सेकंड लगते हैं। इस समय के दौरान जीयूआई (ग्राफिकल यूजर इंटरफेस) लॉक हो जाएगा जिसके परिणामस्वरूप उपयोगकर्ता प्रेस पर कार्रवाई नहीं की जाएगी। लगभग 5 सेकंड के बाद, यदि थ्रेड अभी भी पुनर्प्राप्त नहीं हुआ है तो एक एएनआर संवाद बॉक्स उपयोगकर्ता को सूचित करता है कि एप्लिकेशन प्रतिक्रिया नहीं दे रहा है और उपयोगकर्ता को प्रतीक्षा करने का विकल्प देगा, उम्मीद है कि ऐप अंततः ठीक हो गया, या ऐप को बंद करने के लिए मजबूर किया।

एक क्रैश तब होता है जब ऐप के भीतर एक अपवाद फेंक दिया गया है जिसे संभाला नहीं गया है। उदाहरण के लिए, यदि आप एडिटटेक्स्ट घटक का टेक्स्ट सेट करने का प्रयास करते हैं, लेकिन एडिटटेक्स्ट शून्य है और अपवाद को पकड़ने के लिए कैच स्टेटमेंट नहीं है कि आपका ऐप क्रैश हो जाएगा और बंद हो जाएगा। उपयोगकर्ता क्रैश के कारण क्या नहीं देख पाएगा, उन्हें एक संवाद दिखाया जाएगा कि ऐप ने अप्रत्याशित रूप से बल बंद कर दिया है और उन्हें एक बग रिपोर्ट भेजने का विकल्प देगा। इस उदाहरण में यदि आप बग रिपोर्ट को देखना चाहते हैं तो आपको java.lang.NullPointerException के कारण त्रुटि दिखाई देगी।

उम्मीद है कि इससे मदद मिलती है।

+1

यदि आप जेएनआई के माध्यम से सी ++ कोड चलाते हैं और वहां एक त्रुटि दबाते हैं, तो ऐप प्रक्रिया उपयोगकर्ता के लिए कोई संवाद नहीं होगी। कम से कम यह इस्तेमाल किया जाता था। – juunas

12

ANR (एक pplication एन OT आर esponding) है.अगर मुख्य थ्रेड अधिक से अधिक 5 सेकंड आप ANR पाने के लिए बंद कर दिया जाता long running task in Main Thread (यूआई धागा) से निपटने के कारण है।

क्रैशexception and error Nullpoint, classNotfound टाइपकास्ट तरह की वजह से कर रहे हैं, त्रुटि पार्स आदि ANR भी आवेदन की दुर्घटना का कारण बनता है।

नोट: कभी लंबे यूआई धागा

संदर्भ ANR

+0

एक दुर्घटना क्यों होती है? – user3035740

+0

@ user3035740 अब उत्तर की जांच करें –

+0

क्या मेरे डिवाइस में एएनआर संबंधित जानकारी मिल सकती है? – user3035740

0

पूर्व के लिए ANR पर कार्य चल रहा चलाएँ: यदि आप ui सूत्र में भारी मात्रा में डेटा डाउनलोड कर रहे हैं, meny अपर्याप्त स्मृति आदि जैसे अन्य संभावनाओं यह आ जाएगा। शायद यह एंड्रॉइड में दुर्घटनाओं का कारण बनता है, हम यह नहीं कह सकते कि दोनों एक ही हैं

+0

तो एक क्रैश ANR.right से अलग है ?? – user3035740

+0

हाँ एएनआर सभी संभावनाओं में दुर्घटनाग्रस्त नहीं होगा .. – pavanmvn

+0

मुझे एएनआर संबंधित जानकारी कहां मिल सकती है? – user3035740

2

एएनआर आवेदन का जवाब नहीं दे रहा है, जिसका मतलब है कि आपका ऐप यूआई थ्रेड पर ईवेंट पंजीकृत नहीं करता है क्योंकि लंबे समय तक चलने वाला ऑपरेशन

निष्पादित किया गया है
1
ANR: It is called when anything your application is doing in the UI thread that 
takes a long time to complete (5 sec approx) 

संदर्भ: ANR

Crash: It is called when your Application gets some Error or Exception raised by the DVM 
1

ANR भी 5 सेकंड के भीतर दर-

  1. (ऐसे कुंजी दबाएँ या स्क्रीन टच घटनाओं के रूप में) एक इनपुट घटना का कोई प्रतिसाद का कारण बना।
  2. ब्रॉडकास्ट रिसीवर 10 सेकंड के भीतर निष्पादित नहीं हुआ है।
2

ANR आवेदन प्रतिसाद नहीं के लिए खड़ा है और उसके तब होता है जब लंबे आपरेशन मुख्य थ्रेड में जगह लेता है,

क्रैश अपवाद और Nullpoint तरह त्रुटि के कारण कर रहे हैं ......

1

आवेदन रिस्पॉन्डिंग (ANR):

ANR निम्न स्थितियों में प्रदर्शित होगा:

  • 5 सेकंड के भीतर इनपुट ईवेंट (जैसे कुंजी प्रेस या स्क्रीन टच भी) का जवाब दें।

  • एक प्रसारण रिसीवर 10 सेकेंड के भीतर निष्पादन समाप्त नहीं हुआ है।

एएनआर से कैसे बचें? आमतौर पर Android एप्लिकेशन में , 100 से 200 एमएस जो उपयोगकर्ता परे सीमा है:

  • डेटाबेस कार्यों की तरह लंबी चलने वाली संचालन, नेटवर्क संचालन आदि

के लिए एक अलग कार्यकर्ता धागा जवाबदेही बनाएं सुदृढ़ महसूस होगा कि ऐप धीमा है। निम्नलिखित युक्तियां हैं जिनके माध्यम से हम एप्लिकेशन को अधिक उत्तरदायी दिखा सकते हैं।

  • जब भी आप कोई पृष्ठभूमि कार्य कर रहे हों तो प्रगति संवाद दिखाएं और उपयोगकर्ता प्रतिक्रिया की प्रतीक्षा कर रहा है।

  • विशेष रूप से गेम के लिए, कार्यकर्ता धागे में चाल के लिए गणना करें।

  • यदि आपके एप्लिकेशन में समय लेने वाली प्रारंभिक सेटअप है तो स्प्लैश स्क्रीन दिखाएं।

क्रैश: दुर्घटना आवेदन में बिना क्रिया हालत है और यह जबरदस्ती हमारे आवेदन बंद हो जाएगा। क्रैश के कुछ उदाहरण नलपॉन्टर अपवाद, अवैध राज्य अपवाद आदि जैसे हैं

1

एएनआर के लिए खड़ा है का जवाब नहीं दे रहा है।

यह कई कारणों से हो सकता है जैसे यूआई थ्रेड पर कुछ I/O ऑपरेशन पर कोई एप्लिकेशन ब्लॉक करता है ताकि सिस्टम आने वाले उपयोगकर्ता इनपुट ईवेंट को संसाधित नहीं कर सके। या शायद ऐप एक विस्तृत इन-मेमोरी स्ट्रक्चर बनाने या यूआई थ्रेड में अगले कदम की गणना करने में बहुत अधिक समय बिताता है।

मुख्य धागे को अवरुद्ध करने के परिणामस्वरूप क्रैश नहीं होगा, लेकिन उपयोगकर्ताओं को ऐप को 5 सेकंड के बाद मारने के लिए प्रदर्शित किया जाएगा।

लेकिन क्रैश, मुख्य कारण मानव त्रुटियां हैं। अधिकांश समय एक ऐप्लिकेशन क्रैश एक कोडिंग/डिजाइन मानव

मानव त्रुटियाँ

परीक्षण

नल पॉइंटर एक्सेप्शन की कमी

OutOfMemory

उदाहरण के द्वारा बनाई गई त्रुटि के कारण है :

यह आम है जब यह आम है एक प्रोग्रामर किसी ऑब्जेक्ट या वेरिएबल का संदर्भ देता है जो अस्तित्व में नहीं है, मूल रूप से एक नल-पॉइंटर त्रुटि बना रहा है।

यदि आपके पास कोई खराब कनेक्शन है, तो यह आपके ऐप्स को क्रैश भी कर सकता है। ऐप में मेमोरी प्रबंधन की समस्या भी हो सकती है।

कृपया एंड्रॉइड विशिष्ट अपवाद के प्रकार के लिए मेरा उत्तर देखें जो क्रैश का कारण बन सकता है।

Android Specific Exception

0

[ANR और क्रैश विभिन्न] [1] Android एप्लिकेशन को सामान्य रूप से डिफ़ॉल्ट रूप से किसी एकल थ्रेड "यूआई धागा" या "मुख्य थ्रेड" पर पूरी तरह से चलाते हैं। इसका मतलब यह है कि यूआई थ्रेड में आपका एप्लिकेशन कुछ भी कर रहा है जो पूरा करने में लंबा समय लेता है, एएनआर संवाद को ट्रिगर कर सकता है क्योंकि आपका एप्लिकेशन इनपुट ईवेंट या इरादा प्रसारण को संभालने का मौका नहीं दे रहा है।

0

एएनआर: मूल रूप से मुख्य धागे पर लंबे समय तक चलने वाले कार्य के कारण।

  1. एप्लिकेशन धीमी गति से मुख्य थ्रेड पर आई/ओ को शामिल संचालन कर रही है:

    कुछ सामान्य पैटर्न जब ANR की निदान के लिए देखने के लिए कर रहे हैं।

  2. ऐप मुख्य धागे पर लंबी गणना कर रहा है।
  3. मुख्य धागा एक अन्य प्रक्रिया में एक सिंक्रोनस बाइंडर कॉल कर रहा है, और दूसरी प्रक्रिया को वापस करने में काफी समय लग रहा है।
  4. मुख्य धागा किसी अन्य थ्रेड पर होने वाले लंबे ऑपरेशन के लिए सिंक्रनाइज़ किए गए ब्लॉक की प्रतीक्षा अवरुद्ध है।
  5. मुख्य धागा किसी अन्य धागे के साथ डेडलॉक में है, या तो आपकी प्रक्रिया में या बाइंडर कॉल के माध्यम से। मुख्य धागा सिर्फ एक लंबे ऑपरेशन के लिए इंतजार नहीं कर रहा है, लेकिन एक डेडलॉक स्थिति में है।

निम्नलिखित तकनीकें आपको यह जानने में मदद कर सकती हैं कि इनमें से कौन से कारण आपके एएनआर पैदा कर रहे हैं।

क्रैश: crashs के लिए

कारण कई हो सकता है।कुछ कारणों, स्पष्ट हैं एक शून्य मान या रिक्त स्ट्रिंग के लिए जाँच की तरह, लेकिन दूसरों के एक API या यहाँ तक कि जटिल बहु-क्रम बातचीत

2

ANR और क्रैश उदाहरण के लिए अमान्य तर्क गुजर की तरह, और अधिक सूक्ष्म हैं:

यह सवाल पहले से ही है एक स्वीकार्य उत्तर, लेकिन मैं एएनआर और क्रैश को बेहतर समझने के लिए 2 सरल उदाहरण जोड़ रहा हूं।

ANR:

// this will produce an ANR on your app 
int i = 0; 
while(true) { 
    i++; 
} 

क्रैश:

// this will crash your app : will produce java.lang.ArithmeticException 
int value = 5, i = 0; 
int result = value/i; 
संबंधित मुद्दे