พื้นฐาน Coroutine และขอบเขต
เริ่ม coroutine ในขอบเขตที่เหมาะสม
พื้นฐาน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Coroutine และขอบเขต
- viewModelScope และ Dispatchers
- พื้นฐาน Kotlin Flow
- StateFlow และ SharedFlow