Asosiy kontentga o‘tish
Innovialabs

iOS va Android’da fon vazifalari: cheklovlar va ishonchli yondashuvlar

Chuqur3 daq

Qisqacha

Ikkala OT ham fon vazifalarining aniq vaqtda bajarilishini kafolatlamaydi, shuning uchun ishonchli sinxronizatsiya tizim rejalashtiruvchilari, OT boshqaradigan fon uzatishlari, idempotent amallar va ilova har ochilganda qayta sinxronlashga tayanadi.

Asosiysi: fon kafolatlanmagan

iOS ham, Android ham batareyani tejaydi, shuning uchun ilova fonda qachon va qancha ishlashini OT o‘zi hal qiladi. Kod «har 15 daqiqada» yoki «aynan soat 9:00 da» bajarilishiga tayanib bo‘lmaydi. Ishonchli yondashuv fonni bonus deb qabul qiladi:

  • vazifalarni tizim rejalashtiruvchilari (WorkManager, BGTaskScheduler) orqali qo‘yish;
  • fayllarni uzatish uchun OT o‘zi boshqaradigan fon tarmoq sessiyalaridan foydalanish;
  • amallarni idempotent qilish va uzilgan joydan davom ettira olish;
  • ilova ochilganda har doim qayta sinxronlash.

Android cheklovlari

  • Doze — qurilma harakatsiz va ekran o‘chiq bo‘lsa, tizim tarmoqqa kirish, budilniklar va vazifalarni qisqa xizmat oynalarigacha kechiktiradi.
  • App Standby Buckets — foydalanuvchi ilovani qanchalik kam ochsa, unga fonda ishlashga shunchalik kam ruxsat beriladi.
  • Fondan servis ishga tushirish cheklovlari — oddiy fon Service uzoq yashamaydi; foydalanuvchiga ko‘rinadigan uzoq ish uchun bildirishnomali va turi e’lon qilingan foreground service kerak.
  • Ishlab chiqaruvchi qobiqlari — ba’zi OEM larda standart Android’dan ko‘ra jarayonlarni qattiqroq o‘ldiradigan o‘z «batareya optimizatorlari» bor. Bunday qurilmalarda foydalanuvchidan ilovani istisnolarga qo‘shishni so‘rashga to‘g‘ri keladi.

iOS cheklovlari

  • Fonga o‘tgandan keyin ilova tezda to‘xtatib qo‘yiladi. Qisqa vazifani qo‘shimcha vaqt so‘rab tugatish mumkin, lekin bu soatlar emas, daqiqalar.
  • BGTaskScheduler BGAppRefreshTask (qisqa yangilash) va BGProcessingTask (uzoq ish, ko‘pincha zaryadlanayotganda) ni ishga tushiradi. Vaqtni tizim tanlaydi va foydalanuvchi ilovani qanchalik tez-tez ochishini hisobga oladi.
  • Silent push (content-available) ilovani uyg‘otishi mumkin, lekin yetkazilishi kafolatlanmagan va tizim tomonidan cheklanadi.
  • Agar foydalanuvchi ilovani svayp bilan majburan yopgan bo‘lsa, ko‘pchilik fon mexanizmlari uni uyg‘otmay qo‘yadi.

Qaysi vazifa uchun qaysi vosita

VazifaAndroidiOS
Davriy sinxronizatsiyaWorkManager, PeriodicWorkRequestBGAppRefreshTask
Og‘ir qayta ishlash, zaxiraShartli WorkManager (zaryad, Wi-Fi)BGProcessingTask
Fayl yuklash va yuborishWorkManager, kerak bo‘lsa foreground serviceBackground URLSession
Serverdan shoshilinch hodisaPush-bildirishnoma (FCM)Push-bildirishnoma (APNs)
Marshrut kuzatuvi, navigatsiyalocation turidagi foreground serviceBackground location mode
Geozonalar bo‘yicha yangilashGeofencing APIRegion monitoring, significant location changes

WorkManager amalda

WorkManager qurilma qayta yuklanishidan keyin ham saqlanadi va ichki mexanizmni o‘zi tanlaydi:

val request = PeriodicWorkRequestBuilder<SyncWorker>(1, TimeUnit.HOURS)
    .setConstraints(
        Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()
    )
    .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 30, TimeUnit.SECONDS)
    .build()

WorkManager.getInstance(context).enqueueUniquePeriodicWork(
    "sync", ExistingPeriodicWorkPolicy.KEEP, request
)

Vazifaning noyob nomi ilova har ishga tushganda dublikat paydo bo‘lishidan himoya qiladi. Davriy vazifaning minimal intervali tizim tomonidan cheklangan va haqiqiy ishga tushish vaqti siljishi mumkin.

Fon geolokatsiyasi va yuklashlar

  • Fonda geolokatsiya alohida ruxsat, foydalanuvchiga tushunarli izoh va do‘kon ko‘rigida asoslashni talab qiladi. Yetarli bo‘lgan eng past aniqlikdan foydalaning: joylashuvning sezilarli o‘zgarishlari va geozonalar doimiy GPS’ga qaraganda batareyani ancha kam sarflaydi.
  • Katta fayllarni yuklashni tizimga topshiring: iOS’da background URLSession ilova to‘xtatilgan bo‘lsa ham uzatishni davom ettiradi; Android’da — davom ettirishni qo‘llaydigan WorkManager. Server qismlarga bo‘lingan davom ettiriladigan yuklashni qo‘llab-quvvatlashi kerak.

Ishonchli sinxronizatsiya patternlari

  1. Amallarning lokal navbati. Foydalanuvchi harakatlari avval qurilmadagi bazaga yoziladi, keyin yuboriladi.
  2. Idempotentlik. Har bir amalning noyob kaliti bor va qayta yuborish serverda dublikat yaratmaydi.
  3. Ma’lumotlarni to‘liq qayta yuklash o‘rniga kursor yoki vaqt belgisi bo‘yicha inkremental sinxronizatsiya.
  4. Tarmoq holatini hisobga oladigan eksponensial kechikishli qayta urinishlar.
  5. Push ma’lumot emas, signal: bildirishnoma «o‘zgarishlar bor» deydi, ma’lumotni esa ilova o‘zi oladi.
  6. Majburiy sug‘urta sifatida ochilganda sinxronlash.
  7. Monitoring: muayyan qurilmalardagi muammolarni ko‘rish uchun vazifalar haqiqatan qachon bajarilganini loglang.

Ko‘p beriladigan savollar

Ishonchli tarzda — yo‘q. Foydalanuvchiga eslatmalar uchun lokal bildirishnomalardan foydalaning, ma’lumotlarni esa tizim bergan eng yaqin imkoniyatda sinxronlang.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.