collectAsStateWithLifecycle
สังเกตสถานะของ ViewModel อย่างปลอดภัยใน Compose
collectAsStateWithLifecycle เป็นบทเรียน Jetpack Compose Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Jetpack Compose Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Jetpack Compose Academy มีบทเรียนทั้งหมด 4 บทเรียน
การสังเกต Flow ใน Compose
ViewModel ของคุณเปิดเผยสถานะเป็น Flow และ Composable ของคุณต้องเปลี่ยนสตรีมนั้นให้เป็นค่าที่ Compose อ่านและตอบสนองได้
แนวทางที่ตระหนักถึงวงจรชีวิต
ใช้ collectAsStateWithLifecycle() เพื่อรวบรวม StateFlow เป็นสถานะของ Compose โดยเคารพวงจรชีวิตของหน้าจอ 🔋
val ui by vm.state.collectAsStateWithLifecycle()เหตุใดจึงไม่ใช้ collectAsState
collectAsState() แบบปกติจะรวบรวมข้อมูลต่อไปแม้แอปอยู่เบื้องหลัง ทำให้เสียทรัพยากร ส่วนรุ่นที่ตระหนักถึงวงจรชีวิตจะหยุดชั่วคราวแทน
หยุดเมื่ออยู่เบื้องหลัง
เมื่อหน้าจอหยุด การรวบรวมข้อมูลก็หยุดด้วย และเมื่อกลับมาอยู่เบื้องหน้า การรวบรวมข้อมูลจะทำงานต่อ ช่วยประหยัดแบตเตอรี่และหลีกเลี่ยงการอัปเดตที่ไม่จำเป็น
การอ่านผลลัพธ์
การเรียกนี้ส่งคืน State ซึ่งคุณอ่านด้วย by ทำให้ได้ค่าปกติที่เรียกใช้การจัดองค์ประกอบใหม่ทุกครั้งที่ Flow ส่งค่าออกมา
val ui by vm.state.collectAsStateWithLifecycle()
Text(ui.title)เพิ่มการพึ่งพา
ตัวช่วยนี้อยู่ในส่วนประกอบรันไทม์ ให้เพิ่ม lifecycle-runtime-compose เพื่อให้ฟังก์ชันนี้พร้อมใช้งานใน Composable ของคุณ
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.0")เลือกสถานะขั้นต่ำ
ตามค่าเริ่มต้น การรวบรวมข้อมูลจะทำงานเมื่อสถานะเป็นอย่างน้อย STARTED คุณสามารถลดเกณฑ์นี้ได้ แต่ STARTED เป็นตัวเลือกที่ปลอดภัยและแนะนำ
ทำงานคู่กับ StateFlow
สิ่งนี้เหมาะอย่างยิ่งกับ StateFlow ซึ่งมีค่าปัจจุบันอยู่เสมอ ทำให้หน้าจอมีสิ่งให้แสดงทันทีที่ปรากฏ
ตรวจสอบสถานะเพื่อเลือกการแสดงผล
เมื่อรวบรวมข้อมูลแล้ว ให้ตรวจสอบ UiState เพื่อแสดงสถานะกำลังโหลด สำเร็จ หรือเกิดข้อผิดพลาด โดยทั้งหมดขับเคลื่อนด้วยค่าล่าสุดจาก ViewModel
if (ui.isLoading) Spinner() else Content(ui.items)ปลอดภัยกว่าการรวบรวมข้อมูลด้วยตนเอง
คุณจึงไม่ต้องเริ่มและยกเลิกการรวบรวมข้อมูลด้วยตนเอง ตัวช่วยจะเชื่อมโยงงานนี้กับการจัดองค์ประกอบและวงจรชีวิตให้คุณ ✨
ค่าเริ่มต้นสมัยใหม่
สำหรับหน้าจอ Compose ใหม่ collectAsStateWithLifecycle() เป็นวิธีที่แนะนำให้ใช้สังเกตสถานะของ ViewModel อย่างปลอดภัยและมีประสิทธิภาพ
ตรวจสอบอย่างรวดเร็ว
ตรวจสอบว่าเหตุใดจึงควรใช้ตัวรวบรวมข้อมูลที่ตระหนักถึงวงจรชีวิต
สรุปทบทวน
สังเกตสถานะของ ViewModel ด้วย collectAsStateWithLifecycle(): ฟังก์ชันนี้รวบรวม StateFlow เป็นสถานะของ Compose หยุดชั่วคราวเมื่ออยู่เบื้องหลัง และเป็นค่าเริ่มต้นสมัยใหม่
คำถามที่พบบ่อย
บทเรียน “collectAsStateWithLifecycle” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “collectAsStateWithLifecycle” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Jetpack Compose Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Jetpack Compose Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “collectAsStateWithLifecycle”
สังเกตสถานะของ ViewModel อย่างปลอดภัยใน Compose คุณปฏิบัติ Jetpack Compose Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Jetpack Compose Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Jetpack Compose Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “collectAsStateWithLifecycle” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Jetpack Compose Academy นี้ได้ไหม
ได้ บทเรียน Jetpack Compose Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ
- viewModel() ใน Composable
- จำลองคลาสข้อมูล UiState
- collectAsStateWithLifecycle