0Pricing
Android Academy · บทเรียน

การสร้าง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เมื่อใดควรใช้ WorkManager
  2. การสร้าง Worker
  3. ข้อจำกัดและการกำหนดเวลา
  4. งานแบบเป็นช่วงและแบบต่อเนื่อง
← กลับไปที่ Android Academy