Asosiy qismga oʻtish
Maqolalar

Android

Namuna sarlavha — Android ilovani oflaynda ham foydali saqlash

Lokal maʼlumot va sinxronizatsiyani qanday tuzaman, shunda ilova zaif aloqada ham ishlaydi — va keyingi safar nimani boshqacha qilardim.

Quvonchbek Saydullayev · [Sana] · 1 daqiqa oʻqish

Sample article — placeholder text
Shu sahifada

Men quradigan ilovalarning koʻpi aloqa ishonchsiz joylarda ishlatiladi. Bu arxitekturani boshqa har qanday talabdan koʻproq oʻzgartiradi: telefon haqiqat manbasi boʻlishi kerak, server esa soʻraladigan joy emas, sinxronlanadigan joyga aylanadi.

Avval lokal maʼlumot

Har bir ekran faqat lokal bazadan oʻqiydi. Tarmoq qatlami interfeysni hech qachon toʻgʻridan-toʻgʻri chizmaydi; u interfeys kuzatadigan xuddi shu jadvallarga yozadi. Bu ravshan koʻrinadi — “bitta jonli qiymat kerak” degan ekranga duch kelmaguningizcha. Oflayn qoʻllab-quvvatlash koʻpincha aynan shu bitta ekranda buziladi.

Yordam beradigan kichik qoida: repozitoriy Flow obyektlari qaytaradi, maʼlumot olib keladigan suspend funksiya emas. Olib kelish — sinxronizatsiya ishchisining vazifasi.

Sinxronizatsiya — fon vazifasi

Sinxronizatsiya tarmoq sharti bilan CoroutineWorker ichida ishlaydi. Avval yuborib, keyin olish lokal oʻzgarishni eski server maʼlumoti bilan yozib yuborishdan saqlaydi.

class SyncWorker(ctx: Context, params: WorkerParameters)
  : CoroutineWorker(ctx, params) {
  override suspend fun doWork(): Result {
    // Avval lokal oʻzgarishlar, keyin olish.
    return try { repo.push(); repo.pull(); Result.success() }
    catch (e: IOException) { Result.retry() }
  }
}

Ziddiyatlar bilan ishlash

  • Oddiy maydonlar uchun oxirgi yozuv ustun, qurilma vaqt belgisi bilan.
  • Roʻyxatlar uchun birlashtirish — ikki kishi qoʻshgan yozuv oʻchib ketmasin.
  • Ikki qoida ham toʻgʻri kelmasa, koʻrinadigan “tekshirish kerak” holati.

Maqsad ziddiyatni imkonsiz qilish emas — uni koʻrinadigan va tuzatish arzon qilish.

Yomon tarmoqlarda sinash

Samolyot rejimi — sinov emas. Sekinlashtirilgan, uzilib-uzilib turadigan va kechikishi katta aloqalar har xil narsani buzadi; emulyator profillari birinchi ikkitasini, proksi esa uchinchisini qoplaydi.

Nimani boshqacha qilardim

Ziddiyat qoidalaridan boshlardim. Ular maʼlumot modelini shakllantiradi, keyin qoʻshish esa har bir jadvalni koʻchirishni talab qiladi.

Aloqador

Aloqa

Foydali fikringiz bormi? Keling, quramiz.

Loyiha, ish taklifi yoki maqola haqidagi savol bilan yozing. Har bir xabarga javob beraman.

  • Email

    [email — beriladi]
  • Telegram

    [@handle — beriladi]
  • GitHub

    [github.com/… — beriladi]