Android Academy · บทเรียน

rememberSaveable

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

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

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

ปัญหาของ remember

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

พบกับ rememberSaveable

rememberSaveable ทำงานคล้าย remember แต่ยัง บันทึกค่าไว้ระหว่างการเปลี่ยนแปลงการกำหนดค่าและการสิ้นสุดของกระบวนการ จากนั้นจะกู้คืนค่าให้

var count by rememberSaveable { mutableStateOf(0) }

ตัวอย่างการหมุนหน้าจอ

เมื่อใช้ remember แบบปกติ การหมุนโทรศัพท์จะรีเซ็ตตัวนับเป็น 0 แต่เมื่อใช้ rememberSaveable ค่า count จะยังคงอยู่หลังการหมุน

วิธีการบันทึกค่า

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

ชนิดข้อมูลที่รองรับ

ระบบจะบันทึกชนิดข้อมูลที่จัดเก็บใน Bundle ได้โดยอัตโนมัติ ได้แก่ ชนิดพื้นฐาน String และออบเจ็กต์ Parcelable ส่วนชนิดข้อมูลที่กำหนดเองต้องดำเนินการเพิ่มเติมเล็กน้อย

กระบวนการสิ้นสุด

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

ตัวบันทึกแบบกำหนดเอง

สำหรับชนิดข้อมูลที่ไม่สามารถบันทึกได้โดยอัตโนมัติ ให้ระบุ Saver ที่แปลงข้อมูลไปเป็นรูปแบบที่บันทึกได้และแปลงกลับมา Compose มีตัวช่วยอย่าง listSaver และ mapSaver

val saver = listSaver<MyState, Any>(
    save = { listOf(it.a, it.b) },
    restore = { MyState(it[0] as Int, it[1] as String) }
)

การใช้ตัวบันทึกแบบกำหนดเอง

ส่งตัวบันทึกให้กับ rememberSaveable ผ่านพารามิเตอร์ saver เพื่อให้ Compose ทราบวิธีเก็บรักษาชนิดข้อมูลของคุณ

var state by rememberSaveable(stateSaver = saver) {
    mutableStateOf(MyState(0, ""))
}

ควรใช้แบบใดเมื่อใด

ใช้ rememberSaveable กับสถานะที่ผู้ใช้จะรู้สึกหงุดหงิดหากสูญหายเมื่อหมุนหน้าจอ เช่น อินพุตในแบบฟอร์ม ตำแหน่งการเลื่อน หรือแท็บที่เลือก ใช้ remember แบบปกติกับสถานะ UI ชั่วคราวที่รีเซ็ตได้

ไม่เหมาะกับข้อมูลขนาดใหญ่

Bundle ที่บันทึกไว้มีขนาดเล็ก อย่าเก็บข้อมูลขนาดใหญ่ (เช่น บิตแมปหรือรายการขนาดยาว) ใน rememberSaveable ให้เก็บข้อมูลปริมาณมากไว้ใน ViewModel หรือที่เก็บข้อมูล และบันทึกไว้เฉพาะตัวระบุขนาดเล็ก

นำทุกอย่างมารวมกัน

ช่องกรอกแบบฟอร์มที่ยังคงค่าไว้ได้แม้หมุนหน้าจอ ด้วย rememberSaveable

@Composable
fun LoginField() {
    var email by rememberSaveable { mutableStateOf("") }
    TextField(
        value = email,
        onValueChange = { email = it }
    )
}

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

rememberSaveable ทำอะไรได้บ้างที่ remember ทำไม่ได้

สรุปทบทวน

rememberSaveable:

  • คงอยู่ได้แม้หมุนหน้าจอและโพรเซสถูกทำลาย ไม่ใช่แค่ในระหว่างการจัดองค์ประกอบใหม่
  • บันทึกชนิดข้อมูลพื้นฐาน, String และ Parcelable โดยอัตโนมัติ
  • ใช้ Saver กับชนิดข้อมูลแบบกำหนดเอง
  • เก็บข้อมูลที่บันทึกไว้ให้มีขนาดเล็ก ข้อมูลขนาดใหญ่ควรอยู่ใน ViewModel
เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “rememberSaveable” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “rememberSaveable”

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

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

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

บทเรียน “rememberSaveable” ใช้เวลานานแค่ไหน

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

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

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

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

  1. สถานะด้วย remember และ mutableStateOf
  2. อธิบายการประกอบใหม่
  3. การยกสถานะขึ้น
  4. rememberSaveable
← กลับไปที่ Android Academy