การทำงานอย่างต่อเนื่อง เป็นส่วนหนึ่งของ Android Jetpack
การทำงานจะคงอยู่ถาวรเมื่อยังคงกำหนดเวลาไว้ผ่านการรีสตาร์ทแอปและระบบ การรีบูต WorkManager เป็นโซลูชันที่แนะนำสำหรับงานถาวร เนื่องจากการประมวลผลในเบื้องหลังส่วนใหญ่จะทำงานได้ดีที่สุดผ่านการทำงานอย่างต่อเนื่อง WorkManager จึงเป็น API หลักที่แนะนำสำหรับการทำงานในเบื้องหลังด้วย การประมวลผลโดยทั่วไป
ประเภทของงานที่ต้องทำต่อเนื่อง
WorkManager จะจัดการงานถาวร 3 ประเภทดังนี้
- ทันที: งานที่ต้องเริ่มต้นทันทีและเสร็จสิ้นเร็วๆ นี้ อาจจะ ด่วน
- ทำงานนาน: งานที่อาจทำงานนานกว่าปกติ หรือนานกว่า 10 นาที
- เลื่อนได้: งานที่กําหนดเวลาไว้ซึ่งเริ่มต้นในภายหลังและทํางานได้ เป็นระยะๆ
รูปที่ 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) { workRequestS<aveImageToGalleryWorker(>tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequestU<ploadWorker(>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 ใน แอป
แหล่งข้อมูลเพิ่มเติม
ส่วนต่อไปนี้จะอธิบายแหล่งข้อมูลเพิ่มเติม
วิดีโอ
- ผู้จัดการงาน - ทักษะ MAD, ซีรีส์วิดีโอ
- การทำงานกับ WorkManager จากงาน Android Dev Summit ปี 2018
- WorkManager: มากกว่าพื้นฐานจาก Android Dev 2019 การประชุมสุดยอด