การสร้าง Worker
กำหนดงานเบื้องหลังใน Worker
การสร้าง Worker เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
การสร้าง Worker
หน่วยของงานเบื้องหลังใน WorkManager คือ Worker คุณกำหนดงานโดยสืบทอดคลาสพื้นฐานของเวิร์กเกอร์และเขียนทับเมธอดการทำงานของเวิร์กเกอร์
CoroutineWorker
สำหรับ Kotlin ให้สืบทอดจาก CoroutineWorker โดย doWork() เป็นฟังก์ชัน suspend คุณจึงเรียกใช้ฟังก์ชัน suspend อื่น ๆ และทำงานบนตัวจัดส่งงานเบื้องหลังได้อย่างเป็นธรรมชาติ
class UploadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
// background work here
return Result.success()
}
}ตัวสร้าง
เวิร์กเกอร์ทุกตัวรับ Context และ WorkerParameters ในตัวสร้าง แล้วส่งต่อให้คลาสแม่ WorkManager จะสร้างอินสแตนซ์ของเวิร์กเกอร์ให้คุณ คุณไม่ต้องเรียกตัวสร้างโดยตรง
doWork คืนค่า Result
doWork() ต้องคืนค่า Result ที่อธิบายผลลัพธ์ของงาน โดยมีความเป็นไปได้สามแบบ
Result.success()Result.retry()Result.failure()
Result.success
คืนค่า Result.success() เมื่องานเสร็จสมบูรณ์ งานจะถูกนำออกจากคิว คุณสามารถแนบข้อมูลผลลัพธ์เพื่อส่งต่อให้กับงานที่เชื่อมโยงกันได้
override suspend fun doWork(): Result {
uploadLogs()
return Result.success()
}Result.retry
คืนค่า Result.retry() เมื่อเกิดข้อผิดพลาดชั่วคราว เช่น ข้อผิดพลาดเครือข่ายชั่วคราว WorkManager จะเรียกใช้เวิร์กเกอร์อีกครั้งภายหลังตามนโยบายการหน่วงเวลาก่อนลองใหม่
override suspend fun doWork(): Result {
return try {
syncData()
Result.success()
} catch (e: IOException) {
Result.retry()
}
}Result.failure
คืนค่า Result.failure() เมื่อเกิดข้อผิดพลาดถาวรที่การลองใหม่ไม่สามารถแก้ไขได้ เช่น ข้อมูลนำเข้าไม่ถูกต้อง งานจะหยุดลง และงานที่เชื่อมโยงกันซึ่งขึ้นอยู่กับงานนี้จะไม่ทำงาน
การอ่านข้อมูลนำเข้า
คุณส่งข้อมูลนำเข้าขนาดเล็กผ่าน Data ขณะเพิ่มงานเข้าคิว และอ่านข้อมูลเหล่านั้นด้วย inputData ภายในเวิร์กเกอร์ ควรเก็บข้อมูลให้มีขนาดเล็ก เพราะข้อมูลนี้ไม่เหมาะสำหรับข้อมูลปริมาณมาก
override suspend fun doWork(): Result {
val userId = inputData.getString("user_id") ?: return Result.failure()
sync(userId)
return Result.success()
}การคืนข้อมูลผลลัพธ์
เวิร์กเกอร์สามารถคืนค่า Data ในผลลัพธ์ของตนได้ โดยเวิร์กเกอร์ที่เชื่อมโยงกันจะได้รับข้อมูลนี้เป็นข้อมูลนำเข้า นี่คือวิธีส่งผลลัพธ์ระหว่างขั้นตอนต่าง ๆ
val output = workDataOf("count" to 42)
return Result.success(output)ทำงานบนตัวจัดส่งงานที่เหมาะสม
CoroutineWorker จะเรียกใช้ doWork() บน Dispatchers.Default ตามค่าเริ่มต้น สำหรับการทำงานแบบรับส่งข้อมูลที่บล็อกการทำงาน ให้สลับไปใช้ withContext(Dispatchers.IO) เพื่อไม่ให้กลุ่มเธรดเริ่มต้นมีงานมากเกินไป
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
readAndUploadFile()
Result.success()
}ทำให้เวิร์กเกอร์ทำงานได้ในตัวเอง
เวิร์กเกอร์อาจเริ่มทำงานเป็นเวลานานหลังจากถูกกำหนดเวลาไว้ และอาจทำงานในกระบวนการใหม่ อย่าพึ่งพาสถานะของแอปที่อยู่ในหน่วยความจำ ให้ส่งสิ่งที่จำเป็นผ่านข้อมูลนำเข้า หรืออ่านจากพื้นที่จัดเก็บถาวร
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการสร้าง Worker ของคุณ
ทบทวน
คุณได้สร้าง Worker ดังนี้
- สืบทอดจาก
CoroutineWorkerและเขียนทับdoWork()แบบ suspend - คืนค่า
Result.success(),Result.retry()หรือResult.failure() - อ่าน
inputDataและคืนค่าDataผลลัพธ์ - ใช้
Dispatchers.IOสำหรับงานที่บล็อกการทำงาน และทำให้เวิร์กเกอร์ทำงานได้ในตัวเอง
ถัดไป: เงื่อนไขและการกำหนดเวลา
คำถามที่พบบ่อย
บทเรียน “การสร้าง Worker” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้าง Worker” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้าง Worker”
กำหนดงานเบื้องหลังใน Worker คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้าง Worker” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ