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

כדי להתחיל להשתמש ב-Work Manager, צריך קודם לייבא את הספרייה ל-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 בכיתה. ה-method 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(): העבודה נכשלה ויש לנסות אותה בפעם אחרת בהתאם מדיניות בנושא ניסיון חוזר.

יצירת 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);

הזמן המדויק שבו העובד יבצע תלוי אילוצים שנעשה בהם שימוש ב-WorkRequest ובאופטימיזציות של המערכת. WorkManager נועד לספק את ההתנהגות הטובה ביותר בכפוף להגבלות האלה.

השלבים הבאים

המדריך הזה לתחילת העבודה מגרד רק את פני השטח. WorkRequest יכול לכלול גם מידע נוסף, כמו המגבלות שלפיהן הפעולה צריכה לרוץ, קלט לעבודה, מדיניות עיכוב והשהיה לפני ניסיון חוזר (backoff) של ניסיון חוזר בעבודה. בקטע הבא, הגדרת העבודה שלכם שלכם, לקבל מידע נוסף על האפשרויות האלה בפירוט רב יותר כדי להבין לקביעת לוח זמנים לעבודה ייחודית וחוזרת.

מקורות מידע נוספים

בנוסף למסמכי התיעוד במדריך, יש כמה בלוגים, Codelabs וקודים דוגמאות שיעזרו לך להתחיל.

דוגמיות

  • WorkManagerSample, אפליקציה פשוטה לעיבוד תמונות.
  • Sunflower, אפליקציית הדגמה שמדגימה שיטות מומלצות בארכיטקטורות שונות כולל WorkManager.

שיעורי Lab

בלוגים