การเริ่มต้นใช้งาน WorkManager

เมื่อต้องการเริ่มใช้ WorkManager ให้นำเข้าไลบรารีลงใน Android ก่อน

เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ build.gradle ของแอป

ดึงดูด

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")
}

เมื่อเพิ่มทรัพยากร Dependency และซิงค์ข้อมูลโปรเจ็กต์ 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(): งานไม่สำเร็จและควรลองอีกครั้งในภายหลัง ตาม ลองใช้นโยบายอีกครั้ง

สร้าง 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 สำหรับการลองใหม่ งาน ในส่วนถัดไป ให้เลือกกำหนดงานของคุณ คำขอ คุณจะ ศึกษาตัวเลือกเหล่านี้อย่างละเอียดมากขึ้นและเพื่อทำความเข้าใจ เกี่ยวกับวิธีจัดตารางเวลางานที่ไม่ซ้ำและงานที่เกิดซ้ำ

แหล่งข้อมูลเพิ่มเติม

นอกเหนือจากเอกสารแนะนำแล้ว ยังมีบล็อก, Codelab และโค้ดอีกหลายรายการ ตัวอย่างที่มีให้เพื่อช่วยคุณเริ่มต้นใช้งาน

ตัวอย่าง

  • WorkManagerSample แอปประมวลผลรูปภาพที่ใช้งานง่าย
  • ดอกทานตะวัน แอปสาธิตที่สาธิตแนวทางปฏิบัติแนะนำสำหรับสถาปัตยกรรมที่หลากหลาย ซึ่งรวมถึง WorkManager

Codelab

บล็อก