برای شروع استفاده از WorkManager، ابتدا کتابخانه را به پروژه Android خود وارد کنید.
وابستگیهای زیر را به فایل build.gradle برنامهتان اضافه کنید:
گرووی
dependencies { def work_version = "2.12.0" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
کاتلین
dependencies { val work_version = "2.12.0" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Once you’ve added the dependencies and synchronized your Gradle project, the next step is to define some work to run.
تعریف کار
کار بااستفاده از کلاس Worker تعریف میشود. روش doWork() بهصورت ناهمگام در رشته پسزمینه
ارائهشده توسط WorkManager اجرا میشود.
برای ایجاد کاری که WorkManager اجرا کند، کلاس Worker را گسترش دهید و
روش doWork() را لغو کنید. برای مثال، برای ایجاد Worker که تصاویر را بارگذاری میکند، میتوانید کارهای زیر را انجام دهید:
کاتلین
class UploadWorker(appContext: Context, workerParams: WorkerParameters): Worker(appContext, workerParams) { override fun doWork(): Result { // Do the work here--in this case, upload the images. uploadImages() // Indicate whether the work finished successfully with the Result return Result.success() } }
جاوا
public class UploadWorker extends Worker { public UploadWorker( @NonNull Context context, @NonNull WorkerParameters params) { super(context, params); } @Override public Result doWork() { // Do the work here--in this case, upload the images. uploadImages(); // Indicate whether the work finished successfully with the Result return Result.success(); } }
Result
برگشتدادهشده از doWork() به سرویس WorkManager اطلاع میدهد که آیا
کار موفقیتآمیز بوده است یا نه و درصورت ناموفق بودن، آیا کار باید
دوباره امتحان شود یا نه.
Result.success(): کار با موفقیت تمام شد.Result.failure(): کار ناموفق بود.Result.retry(): کار ناموفق بود و باید در زمان دیگری طبق خطمشی تکرار مجدد آن امتحان شود.
ایجاد WorkRequest
وقتی کارتان تعریف شد، باید با سرویس WorkManager زمانبندی شود تا اجرا شود. WorkManager انعطافپذیری زیادی در نحوه زمانبندی کارتان ارائه میدهد. میتوانید آن را برای اجرای دورهای در یک بازه زمانی زمانبندی کنید، یا میتوانید آن را برای اجرا فقط یکبار زمانبندی کنید.
هرطور که بخواهید کار را زمانبندی کنید، همیشه از
WorkRequest استفاده خواهید کرد. درحالیکه
Worker واحد کار را تعریف میکند،
WorkRequest (و
زیرکلاسهای آن) نحوه و زمان اجرای آن را تعریف میکنند. در سادهترین حالت، میتوانید
از
OneTimeWorkRequest
استفاده کنید،
همانطور که در مثال زیر نشان داده شده است.
کاتلین
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
جاوا
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
ارسال WorkRequest به سیستم
درنهایت، باید WorkRequest خود را بااستفاده از روش
enqueue()
به WorkManager ارسال کنید.
کاتلین
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
جاوا
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
زمان دقیق اجرای کارگر به محدودیتهای استفادهشده در WorkRequest و بهینهسازیهای سیستم بستگی دارد.
WorkManager بهگونهای طراحی شده است که بهترین رفتار را تحت این محدودیتها ارائه دهد.
مراحل بعدی
این راهنمای شروع به کار فقط به اصول اولیه میپردازد. WorkRequest میتواند
شامل اطلاعات اضافی نیز باشد، مثل محدودیتهایی که تحت آنها
کار باید اجرا شود، ورودی کار، تأخیر، و خطمشی عقبنشینی برای امتحان مجدد
کار. در بخش بعدی، تعریف درخواستهای کاری، با جزئیات بیشتری درباره این گزینهها آشنا خواهید شد و همچنین درک بهتری از نحوه زمانبندی کارهای منحصربهفرد و تکرارشونده بهدست خواهید آورد.
منابع بیشتر
علاوهبر اسناد راهنما، چندین وبلاگ، codelab، و نمونه کد برای کمک به شما در شروع کار دردسترس است.
نمونهها
- Sunflower، یک برنامه نمایشی که روالهای مطلوب را با مؤلفههای معماری مختلف، ازجمله WorkManager، نشان میدهد.
Codelabs
- کار کردن با WorkManager (Kotlin) و (Java)
- WorkManager پیشرفته (Kotlin)
وبلاگها
- معرفی WorkManager
- مبانی WorkManager
- WorkManager و Kotlin
- تناوب WorkManager
- سفارشیسازی WorkManager - اصول
- سفارشیسازی WorkManager با Dagger