rememberSaveable
คงสถานะไว้เมื่อการกำหนดค่าเปลี่ยนแปลง
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ