ชุดข้อความใน RxWorker

เรามีความสามารถในการทำงานร่วมกันระหว่าง WorkManager และ RxJava วิธีเริ่มต้น ใส่ทรัพยากร Dependency ของ work-rxjava3 นอกเหนือจาก work-runtime ในไฟล์ Gradle นอกจากนี้ยังมีทรัพยากร Dependency work-rxjava2 ที่รองรับ rxjava2 แทน

จากนั้น คุณควรขยายเวลาRxWorker แทนการขยาย Worker สุดท้ายแล้ว ลบล้าง RxWorker.createWork() เพื่อแสดงผล Single<Result> ซึ่งระบุ Result ของการดำเนินการ เช่น ดังต่อไปนี้:

Kotlin

class RxDownloadWorker(
        context: Context,
        params: WorkerParameters
) : RxWorker(context, params) {
    override fun createWork(): Single<Result> {
        return Observable.range(0, 100)
                .flatMap { download("https://www.example.com") }
                .toList()
                .map { Result.success() }
    }
}

Java

public class RxDownloadWorker extends RxWorker {

    public RxDownloadWorker(Context context, WorkerParameters params) {
        super(context, params);
    }

    @NonNull
    @Override
    public Single<Result> createWork() {
        return Observable.range(0, 100)
            .flatMap { download("https://www.example.com") }
            .toList()
            .map { Result.success() };
    }
}

โปรดทราบว่าจะมีการเรียก RxWorker.createWork() ในเทรดหลัก แต่ระบบส่งกลับ มีค่าเป็น subscriptiond ในเธรดเบื้องหลังโดยค่าเริ่มต้น คุณสามารถลบล้าง RxWorker.getBackgroundScheduler() เพื่อเปลี่ยน ชุดข้อความที่ติดตาม

เมื่อ RxWorker มีสถานะ onStopped() ระบบจะกำจัดการสมัครใช้บริการ ดังนั้น คุณไม่จำเป็นต้องจัดการกับการหยุดงานด้วยวิธีใดๆ เป็นพิเศษ