תחילת העבודה עם WorkManager

כדי להתחיל להשתמש ב-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

בלוגים