כדי להתחיל להשתמש ב-WorkManager, קודם צריך לייבא את הספרייה לפרויקט Android.
מוסיפים את יחסי התלות הבאים לקובץ build.gradle של האפליקציה:
Groovy
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" }
Kotlin
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") }
אחרי שמוסיפים את יחסי התלות ומסנכרנים את פרויקט Gradle, השלב הבא הוא להגדיר עבודה להרצה.
הגדרת העבודה
העבודה מוגדרת באמצעות המחלקה Worker. ה-method doWork() פועלת באופן אסינכרוני ב-thread ברקע שסופק על ידי 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(): העבודה נכשלה וצריך לנסות שוב במועד אחר, בהתאם למדיניות הניסיון החוזר שלה.
יצירת WorkRequest
אחרי שמגדירים את העבודה, צריך לתזמן אותה באמצעות שירות 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);
המועד המדויק שבו ה-worker יופעל תלוי באילוצים שבהם משתמשים ב-WorkRequest ובאופטימיזציות של המערכת.
WorkManager נועד לספק את ההתנהגות הטובה ביותר במסגרת ההגבלות האלה.
השלבים הבאים
המדריך הזה לתחילת העבודה הוא רק קצה הקרחון. ה-WorkRequest יכול לכלול גם מידע נוסף, כמו האילוצים שבהם העבודה צריכה לפעול, קלט לעבודה, השהיה ומדיניות השהיה לפני ניסיון חוזר (backoff) לניסיון חוזר של העבודה. בקטע הבא, הגדרת בקשות העבודה, נרחיב על האפשרויות האלה ונסביר איך לתזמן עבודה חד-פעמית ועבודה חוזרת.
מקורות מידע נוספים
בנוסף למדריכים, יש כמה בלוגים ו-Codelabs שיכולים לעזור לכם להתחיל.
Codelabs
- עבודה עם WorkManager ב-Kotlin וב-Java
- WorkManager מתקדם (Kotlin)
בלוגים
- היכרות עם WorkManager
- היסודות של WorkManager
- WorkManager ו-Kotlin
- המחזוריות של WorkManager
- התאמה אישית של WorkManager – מידע בסיסי
- התאמה אישית של WorkManager באמצעות Dagger