برای شروع استفاده از WorkManager، ابتدا کتابخانه را در پروژه اندروید خود وارد کنید.
وابستگی های زیر را به فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { def work_version = "2.9.1" // (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.9.1" // (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") }
هنگامی که وابستگی ها را اضافه کردید و پروژه Gradle خود را همگام سازی کردید، گام بعدی این است که مقداری کار برای اجرا تعریف کنید.
کار را تعریف کنید
کار با استفاده از کلاس 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 = OneTimeWorkRequestBuilderU<ploadWorker(>) .build()
جاوا
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
درخواست کار را به سیستم ارسال کنید
در نهایت باید WorkRequest
خود را با استفاده از متد enqueue()
به WorkManager
ارسال کنید.
کاتلین
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
جاوا
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
زمان دقیقی که کارگر قرار است اجرا شود به محدودیت هایی که در WorkRequest
شما استفاده می شود و بهینه سازی سیستم بستگی دارد. WorkManager برای ارائه بهترین رفتار تحت این محدودیت ها طراحی شده است.
مراحل بعدی
این راهنمای شروع فقط سطح را خراش می دهد. WorkRequest
همچنین میتواند شامل اطلاعات اضافی باشد، مانند محدودیتهایی که کار باید تحت آن اجرا شود، ورودی کار، تاخیر و خطمشی عقبنشینی برای تلاش مجدد کار. در بخش بعدی، درخواستهای کاری خود را تعریف کنید ، در مورد این گزینهها با جزئیات بیشتر اطلاعات بیشتری کسب خواهید کرد و همچنین درک درستی از نحوه زمانبندی کار منحصربهفرد و تکراری خواهید داشت.
منابع اضافی
علاوه بر مستندات راهنما، چندین وبلاگ، آزمایشگاه کد و نمونه کد برای کمک به شما در شروع کار موجود است.
نمونه ها
- WorkManagerSample ، یک برنامه ساده برای پردازش تصویر.
- Sunflower ، یک برنامه آزمایشی که بهترین شیوه ها را با اجزای مختلف معماری، از جمله WorkManager نشان می دهد.
Codelabs
- کار با WorkManager (Kotlin) و (Java)
- Advanced WorkManager (Kotlin)
وبلاگ ها
- معرفی WorkManager
- مبانی WorkManager
- WorkManager و Kotlin
- ادواری WorkManager
- سفارشی سازی WorkManager - اصول
- WorkManager را با Dagger سفارشی کنید