کار مداوم بخشی از Android Jetpack .
زمانی که کار از طریق راهاندازی مجدد برنامه و راهاندازی مجدد سیستم برنامهریزی شده باقی میماند، کار مداوم است. WorkManager راه حل پیشنهادی برای کار مداوم است. از آنجایی که بیشتر پردازش پسزمینه به بهترین وجه از طریق کار مداوم انجام میشود، بنابراین WorkManager به طور کلی API توصیهشده اولیه برای پردازش پسزمینه است.
انواع کار مداوم
WorkManager سه نوع کار مداوم را مدیریت می کند:
- فوری : کارهایی که باید فوراً شروع شوند و به زودی تکمیل شوند. ممکن است تسریع شود.
- Long Running : کارهایی که ممکن است طولانی تر، احتمالاً بیشتر از 10 دقیقه اجرا شوند.
- Deferrable : کارهای برنامه ریزی شده که در زمان دیگری شروع می شوند و می توانند به صورت دوره ای اجرا شوند.
شکل 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 یک کتابخانه برای کار مداوم است. به همین ترتیب، شما باید از AlarmManager فقط برای ساعت یا تقویم استفاده کنید.
API | توصیه شده برای | ارتباط با WorkManager |
---|---|---|
کوروتین ها | همه کارهای ناهمزمان که نیازی به ماندگاری ندارند. | کوروتین ها ابزار استاندارد ترک رشته اصلی در کاتلین هستند. با این حال، پس از بسته شدن برنامه، حافظه را ترک می کنند. برای کار مداوم، از WorkManager استفاده کنید. |
مدیر آلارم | فقط زنگ هشدار | برخلاف WorkManager، AlarmManager دستگاه را از حالت Doze بیدار می کند. بنابراین از نظر مدیریت قدرت و منابع کارآمد نیست. فقط برای هشدارهای دقیق یا اعلانهایی مانند رویدادهای تقویم از آن استفاده کنید - نه کار پسزمینه. |
جایگزین API های منسوخ شده
WorkManager API جایگزینی توصیه شده برای همه APIهای برنامهریزی پسزمینه Android از جمله FirebaseJobDispatcher
، GcmNetworkManager
و JobScheduler
است.
شروع کنید
برای شروع استفاده از WorkManager در برنامه خود ، راهنمای شروع کار را بررسی کنید.
منابع اضافی
بخش های زیر برخی منابع اضافی را ارائه می دهد.
ویدیوها
- Workmanager - MAD Skills ، مجموعه ویدیویی
- کار با WorkManager ، از نشست برنامه نویس اندروید 2018
- WorkManager: فراتر از اصول اولیه ، از نشست برنامه نویس اندروید 2019