Android Academy · บทเรียน

พื้นฐาน Coroutine และขอบเขต

เริ่ม coroutine ในขอบเขตที่เหมาะสม

บทเรียน 1 จาก 413 ขั้นตอน

พื้นฐาน Coroutine และขอบเขต เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

คอร์รูทีนคืออะไร

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

ฟังก์ชัน suspend

ฟังก์ชันที่กำกับด้วย suspend สามารถหยุดพักได้โดยไม่บล็อกเธรด แล้วกลับมาทำงานต่อภายหลัง ฟังก์ชันนี้เรียกใช้ได้จากคอร์รูทีนหรือฟังก์ชัน suspend อื่นเท่านั้น

suspend fun fetchUser(): User {
    delay(1000) // non-blocking pause
    return User(1, "Ada", "ada@x.com")
}

การหยุดพักกับการบล็อก

delay จะหยุดพักคอร์รูทีน แต่คืนเธรดให้ทำงานอื่นได้ ส่วน Thread.sleep จะบล็อกเธรดทั้งหมด คอร์รูทีนจึงเน้นการหยุดพักเพื่อให้ทำงานได้อย่างมีประสิทธิภาพ

การเริ่มคอร์รูทีน

เริ่มคอร์รูทีนด้วย launch บน CoroutineScope คอร์รูทีนจะทำงานไปพร้อมกันและไม่ส่งคืนผลลัพธ์

scope.launch {
    val user = fetchUser()
    println(user.name)
}

การรับผลลัพธ์ด้วย async

ใช้ async เมื่อคุณต้องการรับค่ากลับ โดยจะส่งคืน Deferred ที่คุณใช้ await ได้

val deferred = scope.async { fetchUser() }
val user = deferred.await()

CoroutineScope คืออะไร

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

การทำงานพร้อมกันแบบมีโครงสร้าง

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

การยกเลิก

การยกเลิกขอบเขตหรืองานจะทำให้เกิด CancellationException ณ จุดหยุดพักถัดไป และหยุดคอร์รูทีนอย่างเรียบร้อย

val job = scope.launch { /* work */ }
job.cancel() // stops it cooperatively

การยกเลิกแบบร่วมมือกัน

คอร์รูทีนต้องให้ความร่วมมือ: ลูปที่ใช้ CPU เป็นเวลานานควรตรวจสอบ isActive หรือเรียกใช้ฟังก์ชัน suspend เพื่อให้การยกเลิกมีผล

while (isActive) {
    // do a chunk of work
}

ข้อยกเว้นในคอร์รูทีน

ข้อยกเว้นที่ไม่ได้ดักจับใน launch จะแพร่ไปยังขอบเขตและยกเลิกคอร์รูทีนพี่น้อง (เว้นแต่จะใช้ SupervisorJob) จัดการข้อผิดพลาดด้วย try/catch หรือ CoroutineExceptionHandler

เหตุใดขอบเขตจึงสำคัญใน Android

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

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับขอบเขตของคอร์รูทีน

ทบทวน

คุณได้เรียนรู้ว่า:

  • ฟังก์ชัน suspend หยุดพักได้โดยไม่บล็อกการทำงาน
  • launch เริ่มงานที่ไม่ต้องรอผลลัพธ์ ส่วน async ส่งคืนผลลัพธ์
  • CoroutineScope กำหนดขอบเขตอายุการทำงานของคอร์รูทีน (การทำงานพร้อมกันแบบมีโครงสร้าง)
  • การยกเลิกเป็นกระบวนการที่ต้องอาศัยความร่วมมือ
เริ่มต้นได้ฟรี

เรียนรู้ Kotlin ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
36
บทเรียน
152

คำถามที่พบบ่อย

บทเรียน “พื้นฐาน Coroutine และขอบเขต” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พื้นฐาน Coroutine และขอบเขต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน Coroutine และขอบเขต”

เริ่ม coroutine ในขอบเขตที่เหมาะสม คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “พื้นฐาน Coroutine และขอบเขต” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. พื้นฐาน Coroutine และขอบเขต
  2. viewModelScope และ Dispatchers
  3. พื้นฐาน Kotlin Flow
  4. StateFlow และ SharedFlow
← กลับไปที่ Android Academy