زمانبندی کار، زمانبندی کار، زمانبندی کار، زمانبندی کار

وقتی می‌خواهید کارهایی را اجرا کنید که حتی اگر برنامه از حالت قابل مشاهده خارج شود، به اجرا ادامه می‌دهند، توصیه می‌کنیم از WorkManager کتابخانه Jetpack استفاده کنید. WorkManager دارای یک مکانیسم زمان‌بندی قوی است که به کارها اجازه می‌دهد در طول راه‌اندازی مجدد برنامه و راه‌اندازی مجدد دستگاه ادامه داشته باشند.

انواع کار

WorkManager سه نوع کار را انجام می دهد:

  • فوری : کارهایی که باید فوراً شروع شوند و به زودی تکمیل شوند. ممکن است تسریع شود.
  • Long Running : کارهایی که ممکن است طولانی تر، احتمالاً بیشتر از 10 دقیقه اجرا شوند.
  • Deferrable : کارهای برنامه ریزی شده که در زمان دیگری شروع می شوند و می توانند به صورت دوره ای اجرا شوند.

شکل 1 چگونگی ارتباط انواع مختلف وظایف با یکدیگر را نشان می دهد.

کار مداوم ممکن است فوری، طولانی مدت یا قابل تعویق باشد
شکل 1 : انواع کار.

به طور مشابه، جدول زیر انواع مختلف کار را نشان می دهد.

تایپ کنید دوره ای نحوه دسترسی
فوری یک بار OneTimeWorkRequest و Worker . برای کار سریع، setExpedited() در OneTimeWorkRequest خود تماس بگیرید.
دویدن طولانی یک بار یا دوره ای هر WorkRequest یا Worker . برای رسیدگی به اعلان، setForeground() در Worker فراخوانی کنید.
قابل تعویق یک بار یا دوره ای PeriodicWorkRequest و Worker .

برای اطلاعات بیشتر در مورد نحوه راه اندازی WorkManager، به راهنمای تعریف WorkRequests خود مراجعه کنید.

ویژگی های WorkManager

علاوه بر ارائه یک API ساده تر و سازگارتر، WorkManager چندین مزیت کلیدی دیگر نیز دارد:

محدودیت های کاری

با استفاده از محدودیت‌های کاری، شرایط بهینه برای اجرای کار خود را به صورت شفاف تعریف کنید. برای مثال، فقط زمانی که دستگاه در یک شبکه بدون اندازه‌گیری است، زمانی که دستگاه بی‌حرکت است، یا زمانی که باتری کافی دارد، کار کنید.

برنامه ریزی قوی

WorkManager به شما اجازه می دهد تا با استفاده از پنجره های زمان بندی انعطاف پذیر، کار را برای اجرا یک بار یا مکرر برنامه ریزی کنید. کار را می‌توان برچسب‌گذاری و نام‌گذاری کرد و به شما امکان می‌دهد کارهای منحصربه‌فرد و قابل تعویض را برنامه‌ریزی کنید و گروه‌های کار را با هم نظارت یا لغو کنید.

کارهای برنامه ریزی شده در یک پایگاه داده SQLite با مدیریت داخلی ذخیره می شود و WorkManager از تداوم این کار و برنامه ریزی مجدد در راه اندازی مجدد دستگاه مراقبت می کند.

علاوه بر این، WorkManager به ویژگی‌های صرفه‌جویی در مصرف انرژی و بهترین روش‌ها مانند حالت Doze پایبند است، بنابراین لازم نیست نگران آن باشید.

کار تسریع شده

می توانید از WorkManager برای برنامه ریزی کار فوری برای اجرا در پس زمینه استفاده کنید. برای کارهایی که برای کاربر مهم هستند و در عرض چند دقیقه کامل می شوند، باید از Work Expedited استفاده کنید.

خط مشی امتحان مجدد انعطاف پذیر

گاهی اوقات کار با شکست مواجه می شود. WorkManager خط‌مشی‌های انعطاف‌پذیری را برای امتحان مجدد ارائه می‌دهد، از جمله یک خط‌مشی عقب‌نشینی نمایی قابل تنظیم.

زنجیر کاری

برای کارهای پیچیده مرتبط، وظایف کاری انفرادی را با استفاده از یک رابط بصری که به شما امکان می دهد کنترل کنید کدام قطعات به صورت متوالی و کدام قطعه به صورت موازی اجرا شوند را به هم متصل کنید .

کاتلین

val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

جاوا

WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

برای هر کار کاری، می توانید داده های ورودی و خروجی آن کار را تعریف کنید . هنگامی که کار با یکدیگر زنجیره ای انجام می شود، WorkManager به طور خودکار داده های خروجی را از یک کار کاری به کار بعدی منتقل می کند.

قابلیت همکاری threading داخلی

WorkManager به طور یکپارچه با Coroutines و RxJava ادغام می شود و انعطاف پذیری برای وصل کردن API های ناهمزمان خود را فراهم می کند.

برای کار قابل اعتماد از WorkManager استفاده کنید

WorkManager برای کارهایی در نظر گرفته شده است که حتی اگر کاربر از صفحه خارج شود، برنامه خارج شود یا دستگاه راه اندازی مجدد شود، باید به طور قابل اعتماد اجرا شود . به عنوان مثال:

  • ارسال گزارش یا تجزیه و تحلیل به سرویس های پشتیبان.
  • همگام سازی دوره ای داده های برنامه با یک سرور.

WorkManager برای کارهای پس‌زمینه در فرآیند در نظر گرفته نشده است که اگر فرآیند برنامه از بین برود، می‌توان با خیال راحت پایان داد. همچنین یک راه حل کلی برای همه کارهایی که نیاز به اجرای فوری دارند نیست. لطفاً راهنمای پردازش پس‌زمینه را مرور کنید تا ببینید کدام راه‌حل نیازهای شما را برآورده می‌کند.

ارتباط با سایر APIها

این جدول نحوه ارتباط WorkManager با API های مشابه را نشان می دهد. این اطلاعات می تواند به شما در انتخاب API مناسب برای نیازهای برنامه کمک کند.

API توصیه شده برای ارتباط با WorkManager
کوروتین ها همه کارهای ناهمزمان که در صورت خروج برنامه از حالت قابل مشاهده، نیازی به تداوم ندارند. کوروتین ها ابزار استاندارد ترک رشته اصلی در کاتلین هستند. با این حال، آنها به محض بسته شدن برنامه متوقف می شوند. برای کارهایی که حتی پس از بسته شدن برنامه همچنان ادامه دارند، از WorkManager استفاده کنید.
مدیر آلارم فقط زنگ هشدار برخلاف کارگران معمولی WorkManager، آلارم‌های دقیق AlarmManager دستگاه را از حالت Doze بیدار می‌کند. بنابراین از نظر مدیریت قدرت و منابع کارآمد نیست. فقط برای هشدارها یا اعلان‌های دقیق مانند رویدادهای تقویم از آن استفاده کنید، نه برای کارهای پس‌زمینه مکرر.

جایگزین API های منسوخ شده

WorkManager API جایگزینی توصیه شده برای APIهای برنامه‌ریزی پس‌زمینه قبلی Android، از جمله FirebaseJobDispatcher و GcmNetworkManager است.

شروع کنید

برای شروع استفاده از WorkManager در برنامه خود، راهنمای شروع کار را بررسی کنید.

منابع اضافی

بخش های زیر برخی منابع اضافی را ارائه می دهد.

ویدیوها

وبلاگ ها

نمونه ها