Jetpack Compose Academy · บทเรียน

เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ

คงสถานะไว้เมื่อการกำหนดค่าเปลี่ยนแปลง

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

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

ปัญหาจากการหมุนหน้าจอ

เมื่อหมุนหน้าจอ Android จะทำลาย Activity ของคุณ ทำให้สถานะที่เก็บไว้ในนั้นหายไป ตัวนับ ข้อความ และตำแหน่งการเลื่อนจะหายไปทั้งหมด 😵

การเปลี่ยนแปลงการกำหนดค่า

การหมุนหน้าจอเป็นหนึ่งในการเปลี่ยนแปลงการกำหนดค่าหลายรูปแบบ การเปลี่ยนธีม การเปลี่ยนภาษา และการปรับขนาดหน้าต่าง ล้วนสร้างหน้าจอของคุณขึ้นใหม่ในลักษณะเดียวกัน

ทำความรู้จัก ViewModel

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

class CounterViewModel : ViewModel() {
    var count = 0
}

ผูกกับหน้าจอ ไม่ใช่ Activity

ViewModel อยู่ในขอบเขตเจ้าของวงจรชีวิตของหน้าจอ ดังนั้นเมื่อสร้าง Activity ขึ้นใหม่ ระบบจะส่งอินสแตนซ์เดิมกลับมาแทนการสร้างอินสแตนซ์ใหม่

การคงอยู่ของสถานะ

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

เมื่อสถานะถูกล้าง

ViewModel จะคงอยู่จนกว่าหน้าจอจะสิ้นสุดลงจริง ๆ เมื่อผู้ใช้ออกจากหน้านั้นอย่างถาวร onCleared() จะทำงาน เพื่อให้คุณคืนทรัพยากรได้

override fun onCleared() {
    // cancel jobs, close streams
}

ไม่ใช่สำหรับทุกกรณี

ViewModel คงอยู่ผ่านการหมุนหน้าจอ แต่ไม่คงอยู่เมื่อโพรเซสถูกทำลาย สำหรับกรณีนั้น ให้ใช้ร่วมกับ SavedStateHandle เพื่อกู้คืนค่าที่สำคัญได้ภายหลัง

เพิ่มการพึ่งพา

คุณจะได้รับการรองรับ ViewModel จากไลบรารีวงจรชีวิต ให้เพิ่มอาร์ติแฟกต์ lifecycle-viewmodel-compose เพื่อให้ Compose ขอใช้งานได้ง่าย

implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.0")

การแยกหน้าที่รับผิดชอบ

นอกจากช่วยให้สถานะคงอยู่แล้ว ViewModel ยังแยกตรรกะออกจากส่วนติดต่อผู้ใช้ Composable ของคุณจึงมุ่งเน้นการวาด ส่วน ViewModel เป็นเจ้าของสถานะ

แบบจำลองทางความคิด

ลองมอง ViewModel เป็นผู้จัดการหลังเวทีที่เงียบสงบ Activity มาแล้วก็ไป แต่ผู้จัดการยังเก็บสถานะของการแสดงไว้พร้อม เพื่อเริ่มการแสดงอีกครั้ง

เหตุใดเรื่องนี้จึงสำคัญ

การคงอยู่ผ่านการหมุนหน้าจอหมายความว่าผู้ใช้จะไม่สูญเสียความคืบหน้าระหว่างทำงาน ความน่าเชื่อถือนี้เป็นพื้นฐานของแอป Compose ที่มีคุณภาพทุกแอป ✨

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณว่าเหตุใด ViewModel จึงมีอายุยืนกว่าการหมุนหน้าจอ

สรุปทบทวน

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

เริ่มต้นได้ฟรี

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

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

คอร์ส
30
บทเรียน
120

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

บทเรียน “เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ”

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

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

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

บทเรียน “เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ
  2. viewModel() ใน Composable
  3. จำลองคลาสข้อมูล UiState
  4. collectAsStateWithLifecycle
← กลับไปที่ Jetpack Compose Academy