Uziladi — bu nima, odatiy sabablari va hal qilish usullari

Muallif: IT Sectr Nashr etilgan: 2026-07-29 O'qish vaqti: 10 daq

Aloqaning yo'qolishi — mobil ilovalardagi eng keng tarqalgan va eng bezovta qiluvchi hodisalardan biri. Foydalanuvchi ma'lumotlarga kirish imkoniyatini yo'qotadi, operatsiya to'xtatiladi, ilova muzlaydi yoki ishdan chiqadi. Google Android Developer Blog ma'lumotlariga ko'ra, foydalanuvchilarning 70% ilova ikki marta ishdan chiqsa yoki muzlasa, uni o'chiradi. Keling, aloqa yo'qolishining sabablari va bardoshli kommunikatsiyalarni qurish usullarini ko'rib chiqaylik.

Asosiy fikrlar

  • ANR (Application Not Responding) — UI oqimining 5 soniyadan ortiq bloklanishi majburiy tugatishga olib keladi
  • Offline-first — mahalliy xotira haqiqat manbai, tarmoq esa sinxronizatsiya mexanizmi bo'lgan arxitektura
  • Retry with backoff — tarmoq xatolarida ortib boruvchi kechikish bilan so'rovni avtomatik takrorlash
  • ConnectivityManager — tarmoq holatini kuzatish va ilova xatti-harakatini moslashtirish uchun Android API
  • Graceful degradation — ilova tarmoq bo'lmaganda ham (hech bo'lmaganda qisman) ishlashi kerak

Mobil ilovalarda "uziladi" nimani anglatadi?

Uziladi — foydalanuvchi atamasi bo'lib, ilova server bilan aloqani yo'qotganda, harakatlarga javob bermasa yoki xato bilan tugasa, vaziyatni tavsiflaydi. Texnik jihatdan bu bo'lishi mumkin: tarmoq xatosi (timeout, DNS failure), ANR (UI oqimining bloklanishi), crash (boshqarilmagan istisno) yoki race condition (poyga holati).

Foydalanuvchi uchun bu stsenariylarning barchasi bir xil ko'rinadi: ilova ishlashni to'xtatadi. Dasturchi uchun farq diagnostika va tuzatish yondashuvidadir. Tarmoq xatolari retry mexanizmlari bilan, ANR — operatsiyalarni UI oqimidan chiqarish bilan, crash — istisnolarni boshqarish bilan hal qilinadi.

Crittercism (hozir Apteligent) ma'lumotlariga ko'ra, o'rtacha mobil ilova har bir ishdan chiqishda foydalanuvchilarning 1-2% ini yo'qotadi. 1 million foydalanuvchiga ega ilova uchun bu bitta xato uchun 10-20 ming yo'qotilgan o'rnatishni anglatadi. Bu, ayniqsa, moliyaviy va tibbiy sektordagi ilovalar uchun juda muhimdir.

Aloqa yo'qolishining asosiy sabablari

Beqaror tarmoq — mobil qurilmalar doimiy Wi-Fi va mobil tarmoq o'rtasida almashadi, qamrovsiz zonalarga (metro, lift, yerto'la) kiradi. Har bir almashish vaqtincha aloqa yo'qolishiga sabab bo'ladi, ilova buni to'g'ri boshqarishi kerak.

Taymautlar — agar server belgilangan vaqt ichida (odatda 10-30 soniya) javob bermasa, mijoz SocketTimeoutException tashlaydi. Uzoq taymautlar qayta aloqasiz foydalanuvchi tomonidan muzlash sifatida qabul qilinadi. Taymautni 15 soniyadan ko'p bo'lmagan qilib o'rnatish tavsiya etiladi.

kotlin
val client = OkHttpClient.Builder()
    .connectTimeout(10, TimeUnit.SECONDS)
    .readTimeout(15, TimeUnit.SECONDS)
    .writeTimeout(15, TimeUnit.SECONDS)
    .retryOnConnectionFailure(true)
    .build()

Poyga holati (race condition) — bir nechta oqim bir vaqtning o'zida sinxronizatsiyasiz bir xil ma'lumotlarni o'qib va yozganda yuzaga keladi. Masalan, UI oqimida keshdan ma'lumotlarni yuklash tarmoqdan keshnini yangilash bilan parallel ravishda eskirgan yoki noto'g'ri ma'lumotlarning ko'rsatilishiga olib kelishi mumkin.

  • Boshqarilmagan istisnolar callback yoki coroutine-da ilovaning ishdan chiqishiga olib keladi
  • Xotira bosimi — tizim oldingi plandagi ilova uchun xotira yetishmasligida ilovani o'ldiradi
  • Lifecycle race — async operatsiya Activity/Fragment yo'q qilinganidan keyin tugallanadi
  • UI bloklanishi — tarmoq yoki ma'lumotlar bazasini asosiy oqimda bajarish 5 soniyadan keyin ANRga sabab bo'ladi

Bardoshli ilovalar uchun arxitektura

Offline-first — mahalliy xotira (Room, CoreData) yagona haqiqat manbai bo'lgan arxitektura namunasi. Tarmoq fon ma'lumotlarini sinxronizatsiya qilish uchun ishlatiladi. Foydalanuvchi tarmoq bo'lmaganda ham doimo mahalliy keshdan dolzarb ma'lumotlarni ko'radi.

Repository pattern — ma'lumotlar uchun yagona kirish nuqtasi, ma'lumotlarni tarmoq yoki keshdan olishni hal qiladi. Repozitoriy ma'lumot manbasini ViewModel va UIdan abstraksiyalaydi. Tarmoq xatosida repozitoriy avtomatik ravishda mahalliy manbaga o'tadi.

kotlin
class UserRepository(
    private val api: UserApi,
    private val dao: UserDao
) {
    suspend fun getUsers(): Result<List<User>> {
        return try {
            val remote = api.fetchUsers()
            dao.insertAll(remote)
            Result.success(remote)
        } catch (e: IOException) {
            val cached = dao.getAll()
            if (cached.isNotEmpty()) {
                Result.success(cached) // tarmoq xatosida keshnı qaytar
            } else {
                Result.failure(e)
            }
        }
    }
}

Circuit Breaker — serverning mavjud bo'lmaganda so'rovlar toshqinidan himoya qilish namunasi. N ketma-ket xatodan keyin kalit ochiladi va barcha so'rovlar ulanishga urinishsiz darhol xato qaytaradi. Belgilangan taymautdan so'ng kalit sinov so'rovi uchun yarim ochiq holatga o'tadi.

Tarmoq xatolarini qanday boshqarish?

Exponential backoff — standart retry mexanizmi. Birinchi muvaffaqiyatsizlikdan so'ng 1 soniya, ikkinchidan so'ng 2 soniya, keyin 4, 8, 16 kutib turing. Maksimal urinishlar sonini cheklang (odatda 3-5), server va batareyani ortiqcha yuklamaslik uchun.

Foydalanuvchi fikr-mulohazasi — tarmoq xatosida tushunarli xabarni ko'rsating: "Aloqa yo'q", "Server vaqtincha mavjud emas", "Internetni tekshiring". Snackbar yoki Inline State View dan foydalaning. Hech qachon foydalanuvchiga texnik xatolarni (HTTP 500, SocketException) ko'rsatmang.

ConnectivityManager — tarmoqni kuzatish uchun Android API. Ilovaga o'zgarishlarga reaksiya berishga ruxsat bering: tarmoq yo'qolganda placeholder ko'rsating, tiklanishda avtomatik ma'lumotlarni yangilang. iOS da Network framework dan NWPathMonitor dan foydalaning.

kotlin
class NetworkMonitor(private val context: Context) {
    private val manager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    fun isOnline(): Boolean {
        val network = manager.activeNetwork ?: return false
        val caps = manager.getNetworkCapabilities(network) ?: return false
        return caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
    }
}

Monitoring va loglash vositalari

Crashlytics (Firebase) — mobil ilovalar uchun standart ishdan chiqish hisoboti vositasi. Barcha boshqarilmagan istisnolarning stacktrace ini, OT versiyasini, qurilma modelini va ishdan chiqish vaqtini to'playdi. Xatolarni guruhlash va tuzatishlar uchun mas'ullarni tayinlash imkonini beradi.

Sentry — Crashlytics ga muqobil bo'lib, ishlash monitoringini qo'llab-quvvatlaydi. Muayyan tranzaksiyalarni (masalan, "foydalanuvchi autentifikatsiyasi") kuzatish va xato qaysi bosqichda sodir bo'lganini ko'rish imkonini beradi. Performance tracing tarmoq taymautlarini ilova mantiqidagi xatolardan ajratishga yordam beradi.

Timber — Android uchun sinf bo'yicha avtomatik teglar qo'shadigan loglash kutubxonasi. Debug qurilishida barcha tarmoq so'rovlari va javoblarini loglang. Release qurilishida — faqat Crashlytics.setCustomLog orqali xato va ogohlantirishlarni loglang.

VositaTurQachon ishlatish
CrashlyticsCrash reportingHar doim release da — ishdan chiqishlarni avtomatik yig'ish
SentryCrash + PerformanceMuayyan foydalanuvchi stsenariylarini profillash kerak bo'lganda
TimberLoggingDebug: to'liq loglash; Release: faqat xatolar
HTTP ToolkitNetwork debugHTTP trafigini mahalliy tutib olish va tahlil qilish

Firebase Summit 2023 ma'lumotlariga ko'ra, Crashlytics + Performance Monitoring ni joriy qilgan ilovalar kritik xatolarni aniqlash va tuzatishning o'rtacha vaqtini 3 kundan 4 soatgacha qisqartiradi. Faol foydalanuvchilarning 0.1% dan ko'p chastotali har bir ishdan chiqishga ogohlantirishlar o'rnatish tavsiya etiladi.

Tez-tez beriladigan savollar

Ilova xato xabarisiz ishdan chiqsa nima qilish kerak?

Agar crash Crashlytics da ushlanmasa, native crash (SIGSEGV, SIGABRT) ni tekshiring — ular Java/Kotlin exception handler tomonidan qayta ishlanmaydi. Android da bu JNI dan native xotira oqishi, iOS da EXC_BAD_ACCESS bo'lishi mumkin. Native crash stacktrace ini yig'ish uchun Breakpad (Android) yoki PLCrashReporter (iOS) dan foydalaning.

Faqat zaif tarmoqda namoyon bo'ladigan xatoni qanday takrorlash mumkin?

Network Link Conditioner (iOS ga o'rnatilgan, Android uchun Facebook Network Connection Class yoki Developer Options > Network > Select network type sozlamalari) dan foydalaning. Kechikishni 500-3000 ms va paket yo'qotilishini 5-30% qilib belgilang. Shuningdek, tarmoq kechikishlari va uzilishlarini simulyatsiya qilish uchun Charles Proxy yoki mitmproxy dan foydalanishingiz mumkin.

Tarmoq so'rovlarida ANR ni qanday oldini olish mumkin?

ANR UI oqimi 5 soniyadan ko'proq bloklanganda yuzaga keladi. Tarmoq so'rovlari fon oqimida bajarilishi kerak: coroutines (viewModelScope.launch(Dispatchers.IO)), RxJava (subscribeOn(Schedulers.io)) yoki sinxronizatsiya uchun WorkManager. HTTP mijozida har doim taymautlarni o'rnating — taymautning yo'qligi abadiy blokirovkaga olib kelishi mumkin.

Race condition nima va undan qanday qochish mumkin?

Race condition — operatsiya natijasi oqimlarning bajarilish tartibiga bog'liq bo'lgan holat. Masalan, foydalanuvchi "Yuborish" tugmasini ikki marta tez bosadi va so'rov ikki marta ketadi. Yechim: Mutex, single-threaded executors yoki state machine dan foydalaning (tugmani birinchi bosishdan keyin o'chiring). Kotlin da coroutines dan Mutex yoki @Synchronized annotatsiyasidan foydalaning.

Ilovaning bardoshligini qanday test qilish mumkin?

Mobil ilovalar uchun Chaos Engineering ni qo'llang: operatsiyalar davomida tarmoqni o'chiring, yuqori kechikishni simulyatsiya qiling, Wi-Fi va mobil tarmoq o'rtasida almashing, jarayonni tizim tomonidan o'ldiring. Vositalar: Facebook Network Connection Class, Charles Proxy, iOS Network Link Conditioner. CI/CD da AndroidTest Orchestrator orqali turli tarmoq shartlari bilan UI testlarini qo'shing.

Xulosa

  • Uziladi — tarmoq xatolari, ANR, crash va race conditions uchun umumiy termin; foydalanuvchi tajribasi bir xil, sabablar har xil
  • Tarmoq xatolari — eng keng tarqalgan sabab; yechim taymautlar (10-15 soniya), exponential backoff va offline-first arxitekturasini o'z ichiga oladi
  • ANR UI oqimining 5 soniyadan ortiq bloklanishida yuzaga keladi; tarmoq va disk operatsiyalarini har doim fon oqimida bajaring
  • Offline-first Repository pattern bilan: mahalliy xotira — haqiqat manbai, tarmoq — sinxronizatsiya mexanizmi
  • Crashlytics + Performance Monitoring — tez-tez ishdan chiqishlarga ogohlantirishlar bilan production monitoring uchun minimal to'plam
  • Poyga holati oqimlarning sinxronizatsiyasini talab qiladi: Mutex, State Machine yoki bir oqimli executor
  • Test qiling zaif tarmoq simulyatsiyasi va Chaos Engineering bilan — faqat shu yo'l bilan ideal dasturlash sharoitida yashirin muammolarni topish mumkin

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