เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ
คงสถานะไว้เมื่อการกำหนดค่าเปลี่ยนแปลง
เหตุใด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใด ViewModel จึงคงอยู่เมื่อหมุนหน้าจอ
- viewModel() ใน Composable
- จำลองคลาสข้อมูล UiState
- collectAsStateWithLifecycle