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

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

בלוגים