การเริ่มต้นใช้งาน 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")
}

เมื่อเพิ่มการพึ่งพาและซิงค์โปรเจ็กต์ 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 ไปยัง WorkManager โดยใช้วิธี enqueue()

Kotlin

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest);

เวลาที่แน่นอนที่ระบบจะเรียกใช้ WorkRequest จะขึ้นอยู่กับข้อจำกัดที่ใช้ใน WorkRequest และการเพิ่มประสิทธิภาพของระบบ WorkManager ออกแบบมาเพื่อให้ทำงานได้ดีที่สุดภายใต้ข้อจำกัดเหล่านี้

ขั้นตอนถัดไป

คู่มือเริ่มต้นใช้งานนี้เป็นเพียงข้อมูลเบื้องต้นเท่านั้น WorkRequest ยังอาจมีข้อมูลเพิ่มเติมด้วย เช่น ข้อจำกัดที่งานควรทำงาน อินพุตสำหรับงาน ความล่าช้า และนโยบายการหยุดทำงานชั่วคราวเพื่อลองทำงานอีกครั้ง ในส่วนถัดไป กำหนดคำของาน คุณจะดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกเหล่านี้อย่างละเอียดยิ่งขึ้น รวมถึงทำความเข้าใจวิธีกำหนดเวลางานที่ไม่ซ้ำกันและงานที่ทำงานซ้ำ

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

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

ตัวอย่าง

  • Sunflower ซึ่งเป็นแอปสาธิตที่แสดงแนวทางปฏิบัติแนะนำเกี่ยวกับคอมโพเนนต์สถาปัตยกรรมต่างๆ รวมถึง WorkManager

Codelabs

บล็อก