การทำงานอย่างต่อเนื่อง เป็นส่วนหนึ่งของ Android Jetpack

การทำงานจะคงอยู่ถาวรเมื่อยังคงกำหนดเวลาไว้ผ่านการรีสตาร์ทแอปและระบบ การรีบูต WorkManager เป็นโซลูชันที่แนะนำสำหรับงานถาวร เนื่องจากการประมวลผลในเบื้องหลังส่วนใหญ่จะทำงานได้ดีที่สุดผ่านการทำงานอย่างต่อเนื่อง WorkManager จึงเป็น API หลักที่แนะนำสำหรับการทำงานในเบื้องหลังด้วย การประมวลผลโดยทั่วไป

ประเภทของงานที่ต้องทำต่อเนื่อง

WorkManager จะจัดการงานถาวร 3 ประเภทดังนี้

  • ทันที: งานที่ต้องเริ่มต้นทันทีและเสร็จสิ้นเร็วๆ นี้ อาจจะ ด่วน
  • ทำงานนาน: งานที่อาจทำงานนานกว่าปกติ หรือนานกว่า 10 นาที
  • เลื่อนได้: งานที่กําหนดเวลาไว้ซึ่งเริ่มต้นในภายหลังและทํางานได้ เป็นระยะๆ

รูปที่ 1 แสดงให้เห็นว่างานต่อเนื่องประเภทต่างๆ เกี่ยวข้องกับงานประเภทนี้อย่างไร อีกรายการ

วันที่ งานถาวรอาจเป็นงานทันที ใช้เวลานาน หรือเลื่อนเวลาได้
รูปที่ 1: ประเภทของงานต่อเนื่อง

ในทำนองเดียวกัน ตารางต่อไปนี้จะสรุปงานประเภทต่างๆ

ประเภท ช่วงเวลา วิธีเข้าถึง
ทันที ครั้งเดียว OneTimeWorkRequest และWorker หากต้องการให้เราดูแลเรื่องด่วน โปรดโทรหา setExpedited() ใน OneTimeWorkRequest ของคุณ
วิ่งนาน ครั้งเดียวหรือเป็นช่วง WorkRequest หรือ Worker ใดก็ได้ เรียกใช้ setForeground() ในผู้ปฏิบัติงานเพื่อจัดการการแจ้งเตือน
เลื่อนเวลาได้ ครั้งเดียวหรือเป็นช่วง PeriodicWorkRequest และWorker

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่า WorkManager โปรดดูการกำหนด WorkRequests

ฟีเจอร์ WorkManager

นอกเหนือจากการให้บริการ API ที่ใช้งานง่ายและสอดคล้องกันมากขึ้นแล้ว WorkManager ยังมี ยังมีข้อดีที่สำคัญอื่นๆ อีก

ข้อจำกัดในการทำงาน

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

การจัดตารางเวลาที่มีประสิทธิภาพ

WorkManager อนุญาตให้คุณกำหนดเวลางานให้เรียกใช้แบบครั้งเดียวหรือ ซ้ำๆ โดยใช้กรอบเวลาการนัดหมายที่ยืดหยุ่น สามารถติดแท็กและตั้งชื่อผลงานได้ ทำให้คุณสามารถจัดตารางเวลางานที่ไม่ซ้ำใคร แทนที่ได้ และตรวจสอบหรือยกเลิก กลุ่มต่างๆ ทำงานร่วมกัน

งานที่กำหนดเวลาไว้จะจัดเก็บไว้ในฐานข้อมูล SQLite ที่มีการจัดการภายในและ WorkManager จะดูแลเพื่อให้แน่ใจว่างานดังกล่าวจะยังคงอยู่และมีการกำหนดเวลาใหม่ ในการรีบูตอุปกรณ์

นอกจากนี้ WorkManager ยังปฏิบัติตามแนวทางปฏิบัติแนะนำและฟีเจอร์ประหยัดพลังงานอีกด้วย เช่น โหมด Doze คุณจึงไม่ต้องกังวลกับโหมดนี้

งานด่วน

คุณสามารถใช้ WorkManager เพื่อกำหนดเวลาการทำงานทันทีสำหรับการดำเนินการใน พื้นหลัง คุณควรใช้งานด่วนสำหรับงานสำคัญ และผู้ใช้จะเสร็จสมบูรณ์ในไม่กี่นาที

นโยบายการลองใหม่ที่ยืดหยุ่น

บางครั้งการทำงานก็ล้มเหลว WorkManager มีนโยบายการลองอีกครั้งที่ยืดหยุ่น ซึ่งรวมถึง นโยบาย Exponential Backoff ที่กำหนดค่าได้

เชนการทำงาน

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

Kotlin


val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

Java


WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

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

ความสามารถในการทำงานร่วมกันของการแยกชุดข้อความในตัว

WorkManager ผสานรวมได้อย่างราบรื่น พร้อม Coroutines และ RxJava และให้ความยืดหยุ่นในการใช้งาน API แบบไม่พร้อมกัน

ใช้ WorkManager เพื่อการทำงานที่เชื่อถือได้

WorkManager มีไว้สำหรับงานที่จำเป็นต้องเรียกใช้ได้อย่างเสถียรแม้ว่า ผู้ใช้ออกจากหน้าจอ ออกจากแอป หรืออุปกรณ์รีสตาร์ท สำหรับ ตัวอย่าง:

  • การส่งบันทึกหรือข้อมูลวิเคราะห์ไปยังบริการแบ็กเอนด์
  • ซิงค์ข้อมูลแอปพลิเคชันกับเซิร์ฟเวอร์เป็นระยะๆ

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

ความเกี่ยวข้องกับ API อื่นๆ

แม้โครูทีนจะเป็นโซลูชันที่เราแนะนำให้ใช้ในบางกรณี ไม่ควรใช้เพื่อทำงานต่อเนื่อง ควรทราบไว้ว่าโครูทีน เป็นเฟรมเวิร์กการเกิดขึ้นพร้อมกัน ในขณะที่ WorkManager เป็นไลบรารีสำหรับ งาน นอกจากนี้ คุณควรใช้ Alarm Manager สำหรับนาฬิกาหรือปฏิทินเท่านั้น

API แนะนำสำหรับ ความสัมพันธ์กับ WorkManager
Coroutines งานแบบไม่พร้อมกันทั้งหมดที่ไม่จำเป็นต้องคงอยู่นาน Coroutines เป็นวิธีการมาตรฐานในการออกจากเทรดหลักใน Kotlin แต่พวกเขาจะออกจากความทรงจำเมื่อปิดแอป หากต้องทำงานอย่างต่อเนื่อง ให้ใช้ WorkManager
เครื่องมือจัดการนาฬิกาปลุก เฉพาะปลุกเท่านั้น นาฬิกาปลุกจะปลุกอุปกรณ์จากโหมด Doze ซึ่งต่างจาก WorkManager ดังนั้นจึงไม่มีประสิทธิภาพในแง่ของการจัดการพลังงานและทรัพยากร ใช้สำหรับการปลุกหรือการแจ้งเตือนที่แม่นยําเท่านั้น เช่น กิจกรรมในปฏิทิน แต่ใช้ไม่ได้กับงานในเบื้องหลัง

แทนที่ API ที่เลิกใช้งานแล้ว

WorkManager API เป็น API ทดแทนที่แนะนำสำหรับ Android รุ่นก่อนหน้าทั้งหมด API การกำหนดเวลาในเบื้องหลัง ซึ่งรวมถึง FirebaseJobDispatcher GcmNetworkManager และ JobScheduler

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

โปรดดูคู่มือเริ่มต้นใช้งานเพื่อเริ่มใช้ WorkManager ใน แอป

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

ส่วนต่อไปนี้จะอธิบายแหล่งข้อมูลเพิ่มเติม

วิดีโอ

บล็อก

ตัวอย่าง