כדי להתחיל להשתמש ב-WorkManager, קודם צריך לייבא את הספרייה לפרויקט Android.
מוסיפים את יחסי התלות הבאים לקובץ build.gradle
של האפליקציה:
Groovy
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" }
Kotlin
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
שמעלה תמונות, אפשר לבצע את הפעולות הבאות:
Kotlin
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() } }
Java
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()
: העבודה נכשלה וצריך לנסות אותה שוב במועד אחר, בהתאם למדיניות הניסיונות החוזרים.
יצירת בקשת תמיכה
אחרי שמגדירים את העבודה, צריך לתזמן אותה באמצעות שירות WorkManager כדי שהיא תרוץ. ב-WorkManager יש הרבה גמישות לגבי תזמון העבודה. אפשר לתזמן אותו כך שיפעל בכל פעם שתתבצע פעולה במרווח זמן מסוים, או לתזמן אותו כך שיפעל רק פעם אחת.
בכל דרך שבה תבחרו לתזמן את העבודה, תמיד תשתמשו ב-WorkRequest
. Worker
מגדיר את יחידת העבודה, ו-WorkRequest
(וקבוצות המשנה שלו) מגדיר איך ומתי היא צריכה לפעול. במקרה הפשוט ביותר, אפשר להשתמש ב-OneTimeWorkRequest
, כפי שמוצג בדוגמה הבאה.
Kotlin
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
Java
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
שליחת ה-WorkRequest למערכת
לבסוף, צריך לשלוח את WorkRequest
אל WorkManager
באמצעות השיטה enqueue()
.
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Java
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
המועד המדויק שבו העובד יופעל תלוי באילוצים שבהם נעשה שימוש ב-WorkRequest
ובאופטימיזציות של המערכת.
WorkManager תוכנן לספק את הביצועים הטובים ביותר במסגרת ההגבלות האלה.
השלבים הבאים
המדריך הזה לתחילת העבודה הוא רק קצה המזלג. ה-WorkRequest
יכול לכלול גם מידע נוסף, כמו האילוצים שבהם העבודה צריכה לפעול, קלט לעבודה, עיכוב ומדיניות המתנה לניסיון חוזר של העבודה. בקטע הבא, הגדרת בקשות העבודה, נרחיב על האפשרויות האלה ונלמד איך לתזמן משימות ייחודיות וחוזרניות.
מקורות מידע נוספים
בנוסף למסמכי העזרה, יש כמה בלוגים, הדרכות ב-Codelab ודוגמי קוד שיעזרו לכם להתחיל.
דוגמיות
- Sunflower, אפליקציית הדגמה שממחישה שיטות מומלצות עם רכיבי ארכיטקטורה שונים, כולל WorkManager.
Codelabs
- עבודה עם WorkManager (Kotlin) ו-(Java)
- Advanced WorkManager (Kotlin)
בלוגים
- השקה של WorkManager
- יסודות WorkManager
- WorkManager ו-Kotlin
- תדירות של WorkManager
- התאמה אישית של WorkManager – עקרונות בסיסיים
- התאמה אישית של WorkManager באמצעות Dagger