Non-Fatal Error mobil ilovalarda — mohiyati, turlari va xatolarni qayta ishlash

Muallif: IT Sectr Nashr etilgan: 2026-05-27 O'qish vaqti: 8 daq

Non-Fatal Error — bu ilova ishini tugatmaydigan va dasturning bajarilishini davom ettirishga imkon beradigan xatodir. Fatal errordan farqli o'laroq, nofatal xatolar foydalanuvchi sessiyasini yo'qotmasdan ushlanishi, qayta ishlanishi va loglanishi mumkin. Firebase Crashlytics Documentation, 2024 ma'lumotlariga ko'ra, production ilovalarida qayd etilgan barcha xatolarning taxminan 70% nofataldir, ammo ularga e'tibor bermaslik texnik qarzning to'planishiga va foydalanuvchi tajribasining asta-sekin yomonlashishiga olib keladi. Non-fatal xatolarni to'g'ri qayta ishlash mobil dasturchining asosiy ko'nikmalaridan biridir.

Asosiy fikrlar

  • Non-Fatal Error — ilovani tugatmaydigan va bajarishni tiklashga imkon beradigan xato
  • Qayta ishlash nofatal xatolar try-catch, loglash va fallback UI ko'rsatishni o'z ichiga oladi
  • Loglash non-fatal xatolar production-da yashirin bug'larni topish uchun juda muhim
  • Fatal Error — aksi: tiklash imkoniyatisiz ilovaning crash bo'lishiga sabab bo'ladigan xato
  • Crashlytics va Sentry non-fatal xatolarni real vaqtda kuzatish imkonini beradi

Non-Fatal Error nima

Non-Fatal Error — bu jarayonning tugashiga olib kelmaydigan istisno yoki xato holatidir. Ilova ishlashda davom etadi, ammo noto'g'ri holatda bo'lishi mumkin: ma'lumotlar yuklanmagan, so'rov yuborilmagan, interfeys elementi ko'rsatilmagan. Foydalanuvchi yo xatoni sezmaydi yoki xabarni ko'radi va ilovadan foydalanishni davom ettiradi.

Asosiy belgilar

Nofatal xato har doim dasturga tiklash yo'lini qoldiradi. Xato boshqaruvchisi muqobil ma'lumotlarni taklif qilishi, operatsiyani takrorlashi yoki interfeys o'rnini bosuvchini ko'rsatishi mumkin. Asosiy vazifa crashning oldini olish va foydalanuvchi tajribasini maqbul darajada saqlashdir. Dasturchi har bir catch blokida aniq tiklash stsenariysini ko'zda tutishi kerak.

Ilovalar barqarorligidagi roli

Instabug 2024 ma'lumotlariga ko'ra, foydalanuvchilarning 65% ikki muvaffaqiyatsiz o'zaro ta'sirdan so'ng ilovani o'chiradi. E'tibordan chetda qolgan non-fatal xatolar to'planadi va umumiy ish sifatini pasaytiradi. Nofatal xatolarni tizimli ravishda loglash va tuzatish retentionni oshirish va ilovalar do'konlarida foydalanuvchi reytinglarini yaxshilashning to'g'ri yo'lidir.

Nofatal xatolarning turlari

Tarmoq xatolari — mobil ilovalardagi eng keng tarqalgan non-fatal xato turi. Ulanish vaqtining oshib ketishi, tarmoqning yo'qolishi, noto'g'ri server status kodi — bu holatlarning barchasi crashsiz ushlanadi va qayta ishlanadi. Foydalanuvchiga xizmat mavjud emasligi haqida xabar ko'rsatiladi va qayta urinib ko'rish taklif etiladi. Tarmoq xatolari uchun eksponensial kechikish bilan retry namunasi xarakterlidir.

Ma'lumotlarni tekshirish xatolari

Server javobining noto'g'ri formati, majburiy maydonning yo'qligi, noto'g'ri ma'lumot turi — parsing xatolari ilova noto'g'ri ma'lumotlarni to'g'ri qayta ishlasa, nofataldir. Odatdagi yondashuv — standart zaxira qiymatlardan foydalanish va keyingi server tahlili uchun so'rov konteksti bilan parsing xatosini loglash.

UI render xatolari

Rasmlarni yuklashdagi muammolar, noto'g'ri shriftlar, layout xatolari — bularning hech biri fatal emas, lekin foydalanuvchi taassurotini yomonlashtiradi. Placeholder rasmlar va fallback qiymatlar bo'sh ekranlarning oldini olishga va xatolarni kamroq sezilarli qilishga imkon beradi. React Native-da UI xatolari uchun zaxira komponentni ko'rsatadigan Error Boundary ishlatiladi.

Biznes mantiq va holat xatolari

Hisoblashdagi xatolar, holat nomuvofiqligi, ekranlar o'rtasidagi noto'g'ri o'tishlar — mantiqiy xatolar ko'pincha crashga olib kelmaydi, lekin ilonning noto'g'ri ishlashiga sabab bo'ladi. Ularni tizimli loglash va monitoringisiz aniqlash qiyinroq, chunki ular crash hisobotini yaratmaydi va foydalanuvchi shikoyatiga qadar sezilmay qoladi.

Non-Fatal Error vs Fatal Error: taqqoslash

Non-Fatal Error fataldan shu bilan farq qiladiki, dasturga ishni davom ettirish imkoniyatini qoldiradi. Fatal error — ilova tiklolmagan holat: null ko'rsatkichni dereferensiyalash, stack to'lib ketishi, xotira yetishmasligi. Non-fatal xatoni ushlash, qayta ishlash va bajarishni davom ettirish mumkin, fatal error esa ilovani qayta ishga tushirishni talab qiladi.

XususiyatNon-Fatal ErrorFatal Error
Ilovani tugatishYo'qHa
Tiklash imkoniyatiHa, catch bloki orqaliYo'q
LoglashKoddan recordException orqaliFaqat crash hisobotchisi bilan
UX ta'siriVaqtinchalik noqulaylikSessiyani to'liq yo'qotish
MisolNetwork timeout, parse errorNullPointerException, OOM

Non-fatal va fatal o'rtasidagi chegara amalga oshirishga bog'liq bo'lishi mumkin. Tarmoq vaqti oshishi bir ilovada non-fatal sifatida qayta ishlanadi (so'rovni 1–2 soniyadan keyin takrorlash), boshqasida fatal bo'lishi mumkin (boshqaruvchi bo'lmaganda crash). Sifatli xato boshqaruvi potentsial fatal holatlarni nofatalga aylantiradi, ilova barqarorligini oshiradi. Xato boshqaruvi tizimini loyihalash yuqori ishonchlilik talablari bo'lgan mobil ilovani ishlab chiqishdagi asosiy arxitektura vazifalaridan biridir. O'rnatilgan monitoring tizimi jamoaga nofatal xatolarni muhim miqdordagi foydalanuvchilarga ta'sir qilishdan oldin tezda aniqlash va bartaraf etish imkonini beradi.

Non-fatal xatolarni loglash

Firebase Crashlytics — mobil ilovalarda nofatal xatolarni loglash uchun asosiy vositadir. recordException metodi ilova ishini to'xtatmasdan to'liq stack trace va ijro konteksti bilan non-fatal istisnoni qayd etish imkonini beradi. Crash hisobotlaridan farqli o'laroq, recordException ushlangan istisnolarni loglash uchun kodning istalgan joyida chaqirilishi mumkin.

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: zaxira ma'lumotlardan foydalanamiz
        Crashlytics.recordException(e)
        showFallbackContent()
    }
}

// Foydalanuvchi kalitlari bilan loglash
Crashlytics.setCustomKey("screen", "Profile")
Crashlytics.setCustomKey("api_version", "v3")

Sentry — batafsilroq non-fatal xato diagnostikasi bilan Crashlytics-ga muqobildir. Sentry SDK serverga istisno tafsilotlarini yuboradigan captureException metodini taqdim etadi. Sentry-ning asosiy afzalligi o'xshash non-fatal xatolarni bir issue-da guruhlash, takrorlanish chastotasini tahlil qilish va breadcrumbs — xatodan oldin foydalanuvchi harakatlari ketma-ketligi ko'rinishidagi ijro kontekstidir.

Non-fatal xatolarni loglash mezonlari

Barcha non-fatal xatolarni loglash shart emas. Kutilgan holatlar — ulanish bo'lmaganda tarmoq yo'qligi — tanlab loglanishi mumkin. Kutilmagan xatolar — boshqariladigan koddagi NullPointerException, noto'g'ri ma'lumot formati, logic error — har doim loglanishi kerak. Har bir jamoa ahamiyatlilik chegarasini o'zi belgilaydi: kuniga 1000 foydalanuvchiga 10 dan 20 gacha noyob non-fatal xato normal hisoblanadi. Non-fatal xatolar sonining keskin o'sishiga ogohlantirishlarni sozlash muhim — bu API-ning yangi versiyasidagi muammolarni yoki relizdan keyingi regressiyani ko'rsatishi mumkin.

Non-fatal xatolarni kodda qayta ishlash

Asosiy boshqaruv mexanizmi — istisnoni ushlaydigan va tiklash kodini bajaradigan try-catch-dir. Tarmoq operatsiyalari uchun odatdagi namuna — eksponensial kechikish bilan so'rovni takrorlash (retry with backoff). Parsing xatolari uchun — standart zaxira qiymatlardan foydalanish va keyingi server tahlili uchun kontekstni loglash.

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)
}

Result turlari — istisnosiz muqobil yondashuv. Funktsiya Success va Failure variantlari bilan sealed class Result qaytaradi. Chaqiruvchi kod ikkala variantni aniq boshqaradi, bu esa boshqarilmagan xatolarni yo'q qiladi. Result turlari turlar darajasida non-fatal holatlarni aniq boshqarish uchun Kotlin (standart kutubxonada Result) va Swift (Result) tillarida mashhur.

Non-fatal xatolar uchun fallback strategiyalari

Har bir non-fatal xato turi uchun tiklash strategiyasi ko'zda tutilishi kerak: tarmoq xatosida keshlangan ma'lumotlarni yuklash, parsing xatosida standart qiymatlardan foydalanish, UI xatosida komponentni qayta ishga tushirish. Yaxshi amaliyot — foydalanuvchiga xato haqida toast yoki snackbar ko'rsatish, lekin ilova bilan o'zaro aloqani to'liq bloklamaslik. Tiklanadigan (recoverable) va tiklanmaydigan xatolarni farqlash muhim — ikkinchisi uchun tiklash strategiyasi boshqacha bo'ladi, masalan, ekranni qayta ishga tushirish yoki ma'lumotlarni tozalash taklifi. Oldingi muvaffaqiyatli holatni keshlash ko'pincha mobil platformalarda non-fatal xatolarni boshqarishning eng sodda va eng samarali usuli hisoblanadi.

Tez-tez beriladigan savollar

Non-fatal xato warningdan nimasi bilan farq qiladi?

Warning — bu kompilyator yoki statik analizatorning koddagi potentsial muammo haqida ogohlantirishidir. Non-fatal error — bu allaqachon sodir bo'lgan, ammo crashga olib kelmagan runtime istisnosi. Warning kompilyatsiyadan oldin bartaraf etilishi mumkin, non-fatal error — catch bloki orqali bajarish vaqtida qayta ishlanishi mumkin.

Barcha non-fatal xatolarni loglash kerakmi?

Yo'q, haddan tashqari loglash monitoringni ifloslantiradi. Production-da kutilmagan xatolarni loglash va kutilgan holatlarni e'tiborsiz qoldirish kerak: ulanish bo'lmaganda tarmoq yo'qligi tanlab loglanadi, boshqariladigan koddagi NullPointerException esa — har doim. Har bir jamoa ilova kontekstidan kelib chiqib ahamiyatlilik chegarasini belgilaydi.

SwiftUI-da non-fatal xatoni qanday qayta ishlash mumkin?

SwiftUI-da xato holatini kuzatish uchun @Published errorState maydoni bilan ObservableObject ishlatiladi. View o'zgarishlarga obuna bo'ladi va muqobil tarkibni ko'rsatadi. iOS 17 dan oldin Combine boshqaruvchilari qo'llanilgan, iOS 17 dan boshlab — UI ning reaktiv yangilanishi uchun SwiftData va @Observable makroslari.

Non-fatal xato fatal bo'lishi mumkinmi?

Ha, agar xato zanjirli reaksiyaga sabab bo'lsa. Misol: rasmni yuklashdagi nofatal nosozlik UI ning noto'g'ri holatiga olib kelishi mumkin, bu esa ko'rsatishga urinishda crashga sabab bo'ladi. Har bir darajada non-fatal xatolarni sifatli qayta ishlash ularning fatal darajaga ko'tarilishining oldini oladi.

Non-fatal iOS va Android-da qanday farqlanadi?

iOS-da non-fatal xatolar do-catch bilan throw orqali qayta ishlanadi, Android-da — try-catch va istisnolar bilan. iOS NSError-dan domenlar va xato kodlari bilan foydalanadi, Android — Java/Kotlin istisnolari. Crashlytics ikkala platformada ham recordException orqali bir xil ishlaydi, monitoring uchun yagona interfeysni ta'minlaydi.

Xulosa

  • Non-Fatal Error — ilovani tugatmaydigan va bajarishni tiklashga imkon beradigan runtime xatosi
  • Tarmoq xatolari, parsing va UI render xatolari — nofatal xatolarning uchta asosiy sinfi
  • Fatal Error — tiklanmasdan ilovaning to'liq crashiga sabab bo'ladigan non-fatalning aksi
  • Crashlytics va Sentry — production-da non-fatal xatolarni loglashning asosiy vositalari
  • Result turlari — turlar darajasida xato holatlarini aniq boshqarish uchun istisnolarga muqobil
  • Placeholder qiymatlar va fallback strategiyalari foydalanuvchi tajribasining sezilarli yomonlashishining oldini oladi
  • Non-fatal xatolarni tizimli tuzatish Instabug ma'lumotlariga ko'ra retention va ilova sifatini oshiradi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing