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

หากต้องการเริ่มต้นใช้งาน WorkManager ให้นําเข้าไลบรารีลงในโปรเจ็กต์ Android ก่อน

เพิ่ม Dependency ต่อไปนี้ลงในไฟล์ build.gradle ของแอป

ดึงดูด

dependencies {     def work_version = "2.11.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.11.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 เมธอด 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

บล็อก