मोबाइल ऐप्स में Non-Fatal Error — सार, प्रकार और त्रुटि प्रबंधन

लेखक: IT Sectr प्रकाशित: 2026-05-27 पढ़ने का समय: 8 मिनट

Non-Fatal Error — एक ऐसी त्रुटि है जो एप्लिकेशन के काम को समाप्त नहीं करती और प्रोग्राम के निष्पादन को जारी रखने की अनुमति देती है। fatal error के विपरीत, गैर-घातक त्रुटियों को पकड़ा, संभाला और लॉग किया जा सकता है बिना उपयोगकर्ता सत्र खोए। Firebase Crashlytics दस्तावेज़ीकरण, 2024 के अनुसार, उत्पादन एप्लिकेशन में लॉग की गई लगभग 70% त्रुटियां गैर-घातक होती हैं, लेकिन उन्हें अनदेखा करने से तकनीकी ऋण जमा होता है और उपयोगकर्ता अनुभव धीरे-धीरे खराब होता है। गैर-घातक त्रुटियों का सही प्रबंधन मोबाइल डेवलपर के प्रमुख कौशलों में से एक है।

मुख्य बिंदु

  • Non-Fatal Error — एक त्रुटि जो एप्लिकेशन को समाप्त नहीं करती और निष्पादन पुनर्प्राप्ति की अनुमति देती है
  • प्रबंधन गैर-घातक त्रुटियों में try-catch, लॉगिंग और फ़ॉलबैक UI प्रदर्शित करना शामिल है
  • लॉगिंग गैर-घातक त्रुटियों की उत्पादन में छिपे बग्स को खोजने के लिए महत्वपूर्ण है
  • Fatal Error — इसका विपरीत: एक त्रुटि जो बिना पुनर्प्राप्ति की संभावना के एप्लिकेशन को क्रैश कर देती है
  • Crashlytics और Sentry वास्तविक समय में गैर-घातक त्रुटियों को ट्रैक करने की अनुमति देते हैं

Non-Fatal Error क्या है

Non-Fatal Error — एक अपवाद या त्रुटि स्थिति है जो प्रक्रिया समाप्ति का कारण नहीं बनती। एप्लिकेशन काम करना जारी रखता है, लेकिन गलत स्थिति में हो सकता है: डेटा लोड नहीं हुआ, अनुरोध नहीं भेजा गया, इंटरफ़ेस तत्व प्रदर्शित नहीं हुआ। उपयोगकर्ता या तो त्रुटि को नोटिस नहीं करता, या एक संदेश देखता है और एप्लिकेशन का उपयोग जारी रखता है।

प्रमुख विशेषताएं

गैर-घातक त्रुटि हमेशा प्रोग्राम को पुनर्प्राप्ति का मार्ग छोड़ती है। त्रुटि संभालने वाला वैकल्पिक डेटा प्रदान कर सकता है, ऑपरेशन दोहरा सकता है, या इंटरफ़ेस प्लेसहोल्डर दिखा सकता है। मुख्य लक्ष्य क्रैश को रोकना और स्वीकार्य उपयोगकर्ता अनुभव बनाए रखना है। डेवलपर को प्रत्येक catch ब्लॉक में स्पष्ट रूप से पुनर्प्राप्ति परिदृश्य की योजना बनानी चाहिए।

एप्लिकेशन स्थिरता में भूमिका

Instabug 2024 के अनुसार, 65% उपयोगकर्ता दो असफल इंटरैक्शन के बाद ऐप अनइंस्टॉल कर देते हैं। बिना ध्यान दिए छोड़ी गई गैर-घातक त्रुटियां जमा होती हैं और समग्र गुणवत्ता को कम करती हैं। गैर-घातक त्रुटियों का व्यवस्थित लॉगिंग और सुधार उपयोगकर्ता प्रतिधारण में सुधार और ऐप स्टोर रेटिंग बढ़ाने का सीधा रास्ता है।

गैर-घातक त्रुटियों के प्रकार

नेटवर्क त्रुटियां मोबाइल एप्लिकेशन में गैर-घातक त्रुटियों का सबसे सामान्य प्रकार हैं। कनेक्शन टाइमआउट, नेटवर्क हानि, गलत सर्वर स्थिति कोड — ये सभी स्थितियां बिना क्रैश के पकड़ी और संभाली जाती हैं। उपयोगकर्ता को पुनः प्रयास के विकल्प के साथ सेवा अनुपलब्धता संदेश दिखाया जाता है। एक्सपोनेन्शियल बैकऑफ़ के साथ पुनः प्रयास पैटर्न नेटवर्क त्रुटियों के लिए विशिष्ट है।

डेटा सत्यापन त्रुटियां

गलत सर्वर प्रतिक्रिया प्रारूप, अनिवार्य फ़ील्ड की कमी, अमान्य डेटा प्रकार — पार्सिंग त्रुटियां गैर-घातक होती हैं यदि एप्लिकेशन गलत डेटा को सही ढंग से संभालता है। विशिष्ट दृष्टिकोण डिफ़ॉल्ट फ़ॉलबैक मानों का उपयोग करना और बाद में सर्वर-साइड विश्लेषण के लिए अनुरोध संदर्भ के साथ पार्सिंग त्रुटि को लॉग करना है।

UI रेंडरिंग त्रुटियां

छवि लोडिंग समस्याएं, गलत फ़ॉन्ट, लेआउट त्रुटियां — ये सभी गैर-घातक हैं लेकिन उपयोगकर्ता अनुभव को खराब करती हैं। प्लेसहोल्डर छवियां और फ़ॉलबैक मान खाली स्क्रीन से बचने और त्रुटियों को कम ध्यान देने योग्य बनाने में मदद करते हैं। React Native में, UI त्रुटियों के लिए फ़ॉलबैक घटक प्रदर्शित करने वाले Error Boundary का उपयोग किया जाता है।

व्यावसायिक तर्क और स्थिति त्रुटियां

गणना त्रुटियां, स्थिति बेमेल, गलत स्क्रीन संक्रमण — तार्किक त्रुटियां अक्सर क्रैश का कारण नहीं बनतीं लेकिन एप्लिकेशन के गलत व्यवहार की ओर ले जाती हैं। व्यवस्थित लॉगिंग और निगरानी के बिना उन्हें ढूंढना कठिन है क्योंकि वे क्रैश रिपोर्ट उत्पन्न नहीं करतीं और उपयोगकर्ता शिकायत तक अनजान रहती हैं।

Non-Fatal Error vs Fatal Error: तुलना

Non-Fatal Error घातक से इस मायने में भिन्न है कि यह प्रोग्राम को काम जारी रखने का मौका छोड़ता है। घातक त्रुटि एक ऐसी स्थिति है जिससे एप्लिकेशन उबर नहीं सकता: नल पॉइंटर डीरेफरेंस, स्टैक ओवरफ़्लो, मेमोरी खत्म। गैर-घातक त्रुटि को पकड़ा जा सकता है, संभाला जा सकता है और निष्पादन जारी रखा जा सकता है, जबकि घातक त्रुटि के लिए एप्लिकेशन को पुनः आरंभ करने की आवश्यकता होती है।

विशेषताNon-Fatal ErrorFatal Error
ऐप समाप्तिनहींहाँ
पुनर्प्राप्ति संभवहाँ, catch ब्लॉक के माध्यम सेनहीं
लॉगिंगकोड से recordException के माध्यम सेकेवल क्रैश रिपोर्टर द्वारा
UX प्रभावअस्थायी असुविधापूर्ण सत्र विफलता
उदाहरणनेटवर्क टाइमआउट, पार्स त्रुटिNullPointerException, OOM

गैर-घातक और घातक के बीच की सीमा कार्यान्वयन पर निर्भर हो सकती है। एक एप्लिकेशन में नेटवर्क टाइमआउट को गैर-घातक के रूप में संभाला जाता है (1–2 सेकंड के बाद पुनः प्रयास), जबकि दूसरे में यह घातक हो सकता है (यदि कोई हैंडलर नहीं है तो क्रैश)। गुणवत्तापूर्ण त्रुटि प्रबंधन संभावित रूप से घातक स्थितियों को गैर-घातक में बदल देता है, जिससे एप्लिकेशन स्थिरता बढ़ती है। उच्च विश्वसनीयता आवश्यकताओं वाले मोबाइल एप्लिकेशन को विकसित करते समय त्रुटि प्रबंधन प्रणाली डिज़ाइन करना प्रमुख आर्किटेक्चरल कार्यों में से एक है। एक अंतर्निहित निगरानी प्रणाली टीम को बड़ी संख्या में उपयोगकर्ताओं को प्रभावित करने से पहले गैर-घातक त्रुटियों का तुरंत पता लगाने और ठीक करने की अनुमति देती है।

गैर-घातक त्रुटियों की लॉगिंग

Firebase Crashlytics मोबाइल एप्लिकेशन में गैर-घातक त्रुटियों को लॉग करने का प्राथमिक उपकरण है। recordException विधि एप्लिकेशन को बाधित किए बिना पूर्ण स्टैक ट्रेस और निष्पादन संदर्भ के साथ एक गैर-घातक अपवाद को कैप्चर करने की अनुमति देती है। क्रैश रिपोर्ट के विपरीत, पकड़े गए अपवादों को लॉग करने के लिए कोड में कहीं भी recordException को कॉल किया जा सकता है।

kotlin
fun fetchUserData(userId: String) {
    try {
        val response = apiService.getUser(userId)
        updateUI(response)
    } catch (e: IOException) {
        Crashlytics.log("Network error for user $userId")
        Crashlytics.recordException(e)
        showRetryDialog()
    } catch (e: JsonParseException) {
        // Non-fatal: फ़ॉलबैक डेटा का उपयोग
        Crashlytics.recordException(e)
        showFallbackContent()
    }
}

// कस्टम कुंजियों के साथ लॉगिंग
Crashlytics.setCustomKey("screen", "Profile")
Crashlytics.setCustomKey("api_version", "v3")

Sentry गैर-घातक त्रुटियों के लिए अधिक विस्तृत निदान के साथ Crashlytics का एक विकल्प है। Sentry SDK captureException विधि प्रदान करता है, जो सर्वर को अपवाद विवरण भेजता है। Sentry का मुख्य लाभ समान गैर-घातक त्रुटियों को एकल मुद्दे में समूहित करना, पुनरावृत्ति आवृत्ति का विश्लेषण करना, और breadcrumbs के रूप में निष्पादन संदर्भ प्रदान करना है — त्रुटि से पहले उपयोगकर्ता क्रियाओं का क्रम।

गैर-घातक त्रुटियों को लॉग करने के मानदंड

सभी गैर-घातक त्रुटियों को लॉग करने की आवश्यकता नहीं है। अपेक्षित स्थितियां — कनेक्शन न होने पर नेटवर्क विफलता — चुनिंदा रूप से लॉग की जा सकती हैं। अप्रत्याशित त्रुटियां — संभाले गए कोड में NullPointerException, अमान्य डेटा प्रारूप, तार्किक त्रुटियां — हमेशा लॉग की जानी चाहिए। प्रत्येक टीम अपनी महत्व सीमा निर्धारित करती है: औसतन, प्रति 1000 उपयोगकर्ताओं पर प्रति दिन 10 से 20 अद्वितीय गैर-घातक त्रुटियां सामान्य मानी जाती हैं। गैर-घातक त्रुटियों में तेज वृद्धि के लिए अलर्ट सेट करना महत्वपूर्ण है — यह नए API संस्करण या रिलीज़ के बाद प्रतिगमन की समस्याओं का संकेत हो सकता है।

कोड में गैर-घातक त्रुटियों का प्रबंधन

मूल प्रबंधन तंत्र try-catch है, जो अपवाद को पकड़ता है और पुनर्प्राप्ति कोड निष्पादित करता है। नेटवर्क संचालन के लिए, विशिष्ट पैटर्न एक्सपोनेन्शियल बैकऑफ़ के साथ पुनः प्रयास है। पार्सिंग त्रुटियों के लिए, दृष्टिकोण डिफ़ॉल्ट फ़ॉलबैक मानों का उपयोग करना और बाद में सर्वर-साइड विश्लेषण के लिए संदर्भ लॉग करना है।

swift
func loadImage(from url: URL) -> UIImage? {
    do {
        let data = try Data(contentsOf: url)
        return UIImage(data: data)
    } catch {
        Logger.shared.logError(error: "Image load failed: \(url)")
        return UIImage(named: "placeholder")
    }
}

func performRequest() async throws -> Data {
    var lastError: Error? = nil
    for attempt in 0..<3 {
        do {
            return try await URLSession.shared.data(from: url)
        } catch {
            lastError = error
            try await Task.sleep(UInt64(pow(2, attempt)) * 1_000_000_000)
        }
    }
    throw lastError ?? URLError(.unknown)
}

परिणाम प्रकार — बिना अपवादों के एक वैकल्पिक दृष्टिकोण। एक फ़ंक्शन Success और Failure वेरिएंट के साथ एक सीलबंद Result क्लास लौटाता है। कॉल करने वाला कोड दोनों वेरिएंट को स्पष्ट रूप से संभालता है, जिससे अनियंत्रित त्रुटियां समाप्त हो जाती हैं। कोटलिन (मानक पुस्तकालय में Result) और Swift (Result) में टाइप स्तर पर गैर-घातक स्थितियों के स्पष्ट प्रबंधन के लिए परिणाम प्रकार लोकप्रिय हैं।

गैर-घातक त्रुटियों के लिए फ़ॉलबैक रणनीतियां

प्रत्येक प्रकार की गैर-घातक त्रुटि के लिए, एक पुनर्प्राप्ति रणनीति की योजना बनाई जानी चाहिए: नेटवर्क त्रुटि पर कैश्ड डेटा लोड करना, पार्सिंग त्रुटि पर डिफ़ॉल्ट मानों का उपयोग करना, UI त्रुटि पर घटक को पुनः आरंभ करना। एक अच्छी प्रथा उपयोगकर्ता को एप्लिकेशन के साथ बातचीत को पूरी तरह से अवरुद्ध किए बिना त्रुटि संदेश के साथ टोस्ट या स्नैकबार दिखाना है। पुनर्प्राप्ति योग्य और गैर-पुनर्प्राप्ति योग्य त्रुटियों के बीच अंतर करना महत्वपूर्ण है — बाद वाले के लिए, पुनर्प्राप्ति रणनीति अलग होगी, जैसे स्क्रीन पुनः आरंभ करने या डेटा साफ़ करने का सुझाव देना। पिछली सफल स्थिति को कैश करना अक्सर मोबाइल प्लेटफ़ॉर्म पर गैर-घातक त्रुटियों को संभालने का सबसे सरल और सबसे प्रभावी तरीका है।

अक्सर पूछे जाने वाले प्रश्न

गैर-घातक त्रुटि चेतावनी से कैसे भिन्न है?

चेतावनी कोड में संभावित समस्या के बारे में कंपाइलर या स्थैतिक विश्लेषक की एक चेतावनी है। गैर-घातक त्रुटि एक रनटाइम अपवाद है जो पहले ही हो चुका है लेकिन क्रैश का कारण नहीं बना। चेतावनी को संकलन से पहले ठीक किया जा सकता है; गैर-घातक त्रुटि को catch ब्लॉक के माध्यम से निष्पादन के दौरान संभाला जाना चाहिए।

क्या सभी गैर-घातक त्रुटियों को लॉग किया जाना चाहिए?

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

SwiftUI में गैर-घातक त्रुटि कैसे संभालें?

SwiftUI में, त्रुटि स्थिति को ट्रैक करने के लिए @Published errorState फ़ील्ड के साथ ObservableObject का उपयोग किया जाता है। View परिवर्तनों की सदस्यता लेता है और वैकल्पिक सामग्री प्रदर्शित करता है। iOS 17 से पहले, हैंडलर के साथ Combine का उपयोग किया जाता था; iOS 17 से शुरू करके, प्रतिक्रियाशील UI अपडेट के लिए SwiftData और @Observable मैक्रोज़ का उपयोग किया जाता है।

क्या गैर-घातक त्रुटि घातक हो सकती है?

हाँ, यदि त्रुटि श्रृंखला प्रतिक्रिया शुरू करती है। उदाहरण: एक गैर-घातक छवि लोडिंग विफलता गलत UI स्थिति का कारण बन सकती है, जो फिर प्रदर्शित करने का प्रयास करने पर क्रैश का कारण बनती है। प्रत्येक स्तर पर गैर-घातक त्रुटियों का गुणवत्तापूर्ण प्रबंधन उन्हें घातक स्तर तक बढ़ने से रोकता है।

iOS और Android में non-fatal कैसे भिन्न है?

iOS में, गैर-घातक त्रुटियों को throw के साथ do-catch के माध्यम से संभाला जाता है; Android में, अपवादों के साथ try-catch के माध्यम से। iOS डोमेन और त्रुटि कोड के साथ NSError का उपयोग करता है; Android Java/Kotlin अपवादों का उपयोग करता है। Crashlytics recordException के माध्यम से दोनों प्लेटफ़ॉर्म पर समान रूप से काम करता है, एक एकीकृत निगरानी इंटरफ़ेस प्रदान करता है।

सारांश

  • Non-Fatal Error — एक रनटाइम त्रुटि जो एप्लिकेशन को समाप्त नहीं करती और निष्पादन पुनर्प्राप्ति की अनुमति देती है
  • नेटवर्क त्रुटियां, पार्सिंग त्रुटियां और UI रेंडरिंग त्रुटियां — गैर-घातक त्रुटियों के तीन मुख्य वर्ग
  • Fatal Error — बिना पुनर्प्राप्ति के पूर्ण एप्लिकेशन क्रैश का कारण बनने वाला non-fatal का विपरीत
  • Crashlytics और Sentry — उत्पादन में गैर-घातक त्रुटियों को लॉग करने के मुख्य उपकरण
  • परिणाम प्रकार — टाइप स्तर पर त्रुटि स्थितियों के स्पष्ट प्रबंधन के लिए अपवादों का एक विकल्प
  • प्लेसहोल्डर मान और फ़ॉलबैक रणनीतियां उपयोगकर्ता अनुभव की दृश्य गिरावट को रोकती हैं
  • व्यवस्थित सुधार गैर-घातक त्रुटियों का Instabug के अनुसार प्रतिधारण और ऐप गुणवत्ता में सुधार करता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें