Sobes.tech
Junior

WorkManager nima?

sobes.tech AI

AIdan javob

WorkManager — bu Android uchun tavsiya etilgan yechim bo‘lib, u kechiktirilgan, kafolatlangan fon ishlarini bajarish uchun mo‘ljallangan, hatto ilova yopilgan yoki qurilma qayta ishga tushirilgan bo‘lsa ham.

U Android Jetpack kutubxonalar to‘plamining bir qismidir va vazifalarni rejalashtirish uchun mos va ishonchli usul taqdim etadi.

Asosiy afzalliklar:

  • Kafolatlangan bajarilish: WorkManager ilova majburan to‘xtatilgan yoki qurilma qayta ishga tushirilgan bo‘lsa ham, fon ishini bajarilishini kafolatlaydi.
  • Constraints qo‘llab-quvvatlash: Ishni bajarish uchun shartlarni belgilash imkonini beradi (masalan, tarmoq mavjudligi, batareya zaryadlash holati).
  • Yagona va davriy vazifalarni qo‘llab-quvvatlash: Bir martalik yoki takrorlanadigan vazifalarni rejalashtirish mumkin.
  • Ishni bekor qilish qo‘llab-quvvatlanadi: Rejalashtirilgan ishlarni bekor qilish uchun mexanizmlar taqdim etadi.
  • Turli Android versiyalari bilan moslik: Operatsion tizim versiyasiga qarab mos API’larni ishlatadi (JobScheduler, AlarmManager va BroadcastReceiver).
  • Murakkab ish grafiklarini qo‘llab-quvvatlash: Bir nechta vazifalarni zanjirlar yoki parallel guruhlarga birlashtirish imkonini beradi.

Asosiy komponentlar:

  • Worker: bajarilishi kerak bo‘lgan haqiqiy ishni belgilaydi.
  • WorkRequest: ish qanday va qachon bajarilishi kerakligini belgilaydi. OneTimeWorkRequest va PeriodicWorkRequest mavjud.
  • WorkManager: WorkRequest’larni rejalashtiradi va boshqaradi.

Foydalanish misoli:

// Bir martalik vazifa uchun WorkRequest yaratish
val uploadWorkRequest: WorkRequest =
    OneTimeWorkRequestBuilder<MyUploadWorker>()
        .build()

// Vazifani rejalashtirish
WorkManager.getInstance(context).enqueue(uploadWorkRequest)
// Worker sinfi misoli
class MyUploadWorker(
    appContext: Context,
    workerParams: WorkerParameters
) : Worker(appContext, workerParams) {

    override fun doWork(): Result {
        // Bu yerda og‘ir yoki fon ish bajariladi
        return Result.success() // yoki Result.failure(), Result.retry()
    }
}