ตั้งเวลางานด้วย WorkManager เป็นส่วนหนึ่งของ Android Jetpack
WorkManager เป็นโซลูชันที่แนะนำสำหรับงานที่ทำงานอยู่เสมอ งานจะยังคงอยู่เมื่อมีการกําหนดเวลาไว้ผ่านการรีสตาร์ทแอปและการรีบูตระบบ เนื่องจากการประมวลผลเบื้องหลังส่วนใหญ่จะทําได้ดีที่สุดผ่านงานที่ทำงานอยู่อย่างต่อเนื่อง WorkManager จึงถือเป็น API หลักที่แนะนําสําหรับการประมวลผลเบื้องหลัง
ประเภทของงานที่เก็บไว้ถาวร
WorkManager จัดการงานที่ทำงานอยู่อย่างต่อเนื่อง 3 ประเภท ได้แก่
- ทันที: งานที่ต้องทำทันทีและเสร็จสิ้นในไม่ช้า อาจเร่งดำเนินการ
- ทำงานนาน: งานที่อาจทำงานนานขึ้น ซึ่งอาจนานกว่า 10 นาที
- เลื่อนได้: งานที่ตั้งเวลาไว้ซึ่งจะเริ่มทำงานในภายหลังและสามารถทำงานเป็นระยะๆ ได้
รูปที่ 1 แสดงความสัมพันธ์ของงานถาวรประเภทต่างๆ
ในทํานองเดียวกัน ตารางต่อไปนี้จะแสดงงานประเภทต่างๆ
ประเภท | ความถี่ | วิธีเข้าถึง |
---|---|---|
ทันที | ครั้งเดียว | OneTimeWorkRequest และWorker
หากต้องการงานด่วน โปรดโทรหา |
ทำงานเป็นเวลานาน | แบบครั้งเดียวหรือเป็นระยะ | WorkRequest หรือ Worker ก็ได้ โทรหา setForeground() ใน Worker เพื่อจัดการการแจ้งเตือน
|
เลื่อนได้ | แบบครั้งเดียวหรือเป็นระยะ | PeriodicWorkRequest และWorker
|
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่า WorkManager ได้ในคู่มือการกำหนด WorkRequest
ฟีเจอร์
นอกจาก API ที่เรียบง่ายและสม่ำเสมอมากขึ้นแล้ว WorkManager ยังมีข้อดีที่สำคัญอื่นๆ อีกมากมาย ดังนี้
ข้อจำกัดของงาน
กําหนดเงื่อนไขที่เหมาะสมที่สุดเพื่อให้งานทํางานโดยใช้ข้อจํากัดของงาน เช่น ทำงานเฉพาะเมื่ออุปกรณ์อยู่ในเครือข่ายที่ไม่จำกัดปริมาณการใช้งาน เมื่ออุปกรณ์ไม่มีการใช้งาน หรือเมื่อแบตเตอรี่เพียงพอ
การกำหนดเวลาที่มีประสิทธิภาพ
WorkManager ช่วยให้คุณกำหนดเวลางานให้ทำงานแบบครั้งเดียวหรือซ้ำๆได้โดยใช้กรอบเวลาที่กำหนดเวลาได้ยืดหยุ่น คุณยังติดแท็กและตั้งชื่องานได้ด้วย ซึ่งจะช่วยให้คุณกำหนดเวลางานที่ไม่ซ้ำกันซึ่งสามารถแทนที่กันได้ รวมถึงตรวจสอบหรือยกเลิกกลุ่มงานพร้อมกันได้
งานที่ตั้งเวลาไว้จะจัดเก็บไว้ในฐานข้อมูล SQLite ที่จัดการภายใน และ WorkManager จะดูแลให้งานนี้ยังคงอยู่และกำหนดเวลาใหม่เมื่ออุปกรณ์รีบูต
นอกจากนี้ WorkManager ยังใช้ฟีเจอร์และแนวทางปฏิบัติแนะนำสำหรับการประหยัดพลังงาน เช่น โหมดสลีป คุณจึงไม่ต้องกังวล
งานด่วน
คุณสามารถใช้ WorkManager เพื่อกำหนดเวลางานให้ทำงานทันทีในเบื้องหลังได้ คุณควรใช้การทํางานแบบเร่งด่วนกับงานที่สําคัญต่อผู้ใช้และทําเสร็จภายในไม่กี่นาที
นโยบายการลองใหม่แบบยืดหยุ่น
บางครั้งงานก็ดำเนินการไม่สำเร็จ WorkManager มีนโยบายการลองใหม่แบบยืดหยุ่น ซึ่งรวมถึงนโยบายการถดถอยแบบเลขชี้กำลังที่กำหนดค่าได้
การเชื่อมโยงงาน
สำหรับงานที่ซับซ้อนที่เกี่ยวข้อง ให้เชื่อมโยงงานแต่ละรายการเข้าด้วยกันโดยใช้อินเทอร์เฟซที่ใช้งานง่ายซึ่งช่วยให้คุณควบคุมได้ว่าจะให้งานใดทำงานตามลำดับและงานใดทำงานพร้อมกัน
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 เป็นไลบรารีสำหรับงานที่ทำงานอยู่เสมอ ในทํานองเดียวกัน คุณควรใช้ AlarmManager สําหรับนาฬิกาหรือปฏิทินเท่านั้น
API | แนะนำสำหรับ | ความสัมพันธ์กับ WorkManager |
---|---|---|
Coroutines | งานแบบไม่พร้อมกันทั้งหมดที่ไม่จําเป็นต้องคงอยู่ | โคโริวทีนเป็นวิธีมาตรฐานในการออกจากเธรดหลักใน Kotlin อย่างไรก็ตาม ข้อมูลดังกล่าวจะออกจากหน่วยความจำเมื่อแอปปิด สำหรับงานที่ทำงานอยู่ตลอด ให้ใช้ WorkManager |
AlarmManager | เฉพาะปลุกเท่านั้น | AlarmManager จะปลุกอุปกรณ์จากโหมด Doze ซึ่งแตกต่างจาก WorkManager ดังนั้นจึงใช้พลังงานและจัดการทรัพยากรอย่างไม่มีประสิทธิภาพ ใช้เฉพาะสำหรับการปลุกหรือการแจ้งเตือนที่แม่นยำ เช่น กิจกรรมในปฏิทิน ไม่ใช่งานเบื้องหลัง |
การเปลี่ยน API ที่เลิกใช้งานแล้ว
เราขอแนะนําให้ใช้ WorkManager API แทน API การจัดกําหนดเวลาเบื้องหลังทั้งหมดของ Android เวอร์ชันเก่า ซึ่งรวมถึง FirebaseJobDispatcher, GcmNetworkManager และ Job Scheduler
เริ่มต้นใช้งาน
ดูคู่มือเริ่มต้นใช้งานเพื่อเริ่มใช้ WorkManager ในแอป
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับ WorkManager
ได้ที่แหล่งข้อมูลต่อไปนี้
ตัวอย่าง
วิดีโอ
- ซีรีส์วิดีโอ Workmanager - ทักษะ MAD
- การทำงานกับ WorkManager จาก Android Dev Summit 2018
- WorkManager: นอกเหนือจากพื้นฐาน จาก Android Dev Summit 2019
บล็อก
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- การเริ่มต้นแอป