เหตุการณ์ต่างๆ ซึ่งบางอย่างเกิดจากผู้ใช้เรียกให้แสดงและบางอย่างเกิดจากระบบเรียกให้แสดง อาจทําให้ Activity
เปลี่ยนจากสถานะหนึ่งไปอีกสถานะหนึ่ง เอกสารนี้จะอธิบายกรณีทั่วไปที่พบบ่อยซึ่งการเปลี่ยนแปลงดังกล่าวเกิดขึ้น และวิธีจัดการการเปลี่ยนแปลงเหล่านั้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับสถานะกิจกรรมได้ที่วงจรชีวิตของกิจกรรม ดูข้อมูลเกี่ยวกับวิธีที่คลาส ViewModel
ช่วยคุณจัดการวงจรของกิจกรรมได้ที่ภาพรวมของ ViewModel
การเปลี่ยนแปลงการกําหนดค่าเกิดขึ้น
มีเหตุการณ์หลายอย่างที่อาจทริกเกอร์การเปลี่ยนแปลงการกําหนดค่า ตัวอย่างที่เห็นได้ชัดที่สุดคือการเปลี่ยนแปลงการวางแนวระหว่างแนวตั้งกับแนวนอน กรณีอื่นๆ ที่อาจทําให้เกิดการกําหนดค่า ได้แก่ การเปลี่ยนแปลงการตั้งค่าภาษาหรืออุปกรณ์อินพุต
เมื่อเกิดการเปลี่ยนแปลงการกําหนดค่า ระบบจะทำลายและสร้างกิจกรรมขึ้นมาใหม่ ซึ่งจะทริกเกอร์การเรียกกลับต่อไปนี้ในอินสแตนซ์กิจกรรมเดิม
ระบบจะสร้างอินสแตนซ์ใหม่ของกิจกรรม และเรียกใช้การเรียกกลับต่อไปนี้
ใช้อินสแตนซ์ ViewModel
, เมธอด onSaveInstanceState()
หรือพื้นที่เก็บข้อมูลในเครื่องแบบถาวรร่วมกันเพื่อรักษาสถานะ UI ของกิจกรรมไว้ท่ามกลางการเปลี่ยนแปลงการกําหนดค่า การเลือกวิธีรวมตัวเลือกเหล่านี้ขึ้นอยู่กับความซับซ้อนของข้อมูล UI, กรณีการใช้งานสําหรับแอป และการพิจารณาความเร็วในการดึงข้อมูลเทียบกับการใช้หน่วยความจํา ดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึกสถานะ UI ของกิจกรรมได้ที่หัวข้อบันทึกสถานะ UI
จัดการกรณีที่มีหลายหน้าต่าง
เมื่อแอปเข้าสู่โหมดหลายหน้าต่าง (พร้อมใช้งานใน Android 7.0 (API ระดับ 24) ขึ้นไป) ระบบจะแจ้งให้กิจกรรมที่กำลังดำเนินอยู่ทราบถึงการเปลี่ยนแปลงการกำหนดค่า ซึ่งจะทำให้มีการเปลี่ยนผ่านวงจรตามที่อธิบายไว้ก่อนหน้านี้
ลักษณะการทำงานนี้จะปรากฏขึ้นด้วยหากแอปที่อยู่ในโหมดหลายหน้าต่างอยู่แล้วมีการปรับขนาด กิจกรรมสามารถจัดการการเปลี่ยนแปลงการกําหนดค่าด้วยตนเอง หรือจะอนุญาตให้ระบบทำลายกิจกรรมและสร้างใหม่ด้วยมิติข้อมูลใหม่ก็ได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับวงจรของฟีเจอร์หลายหน้าต่างได้ที่คำอธิบายวงจรของฟีเจอร์หลายหน้าต่างในหน้าการรองรับฟีเจอร์หลายหน้าต่าง
ในโหมดหลายหน้าต่าง แม้ว่าผู้ใช้จะเห็นแอป 2 แอป แต่จะมีเพียงแอปที่ผู้ใช้โต้ตอบอยู่เท่านั้นที่แสดงอยู่เบื้องหน้าและได้รับโฟกัส กิจกรรมดังกล่าวอยู่ในสถานะ "ดำเนินการต่อ" ส่วนแอปในหน้าต่างอื่นอยู่ในสถานะ "หยุดชั่วคราว"
เมื่อผู้ใช้เปลี่ยนจากแอป ก. ไปยังแอป ข. ระบบจะเรียกใช้ onPause()
ในแอป ก. และ onResume()
ในแอป ข. โดยจะสลับระหว่าง 2 วิธีนี้ทุกครั้งที่ผู้ใช้สลับใช้แอป
ดูรายละเอียดเพิ่มเติมเกี่ยวกับโหมดหลายหน้าต่างได้ที่การรองรับโหมดหลายหน้าต่าง
กิจกรรมหรือกล่องโต้ตอบปรากฏในเบื้องหน้า
หากกิจกรรมหรือกล่องโต้ตอบใหม่ปรากฏขึ้นที่เบื้องหน้า โดยดึงโฟกัสและบดบังกิจกรรมที่กำลังดำเนินอยู่บางส่วน กิจกรรมที่ถูกบดบังจะเสียโฟกัสและเข้าสู่สถานะ "หยุดชั่วคราว" จากนั้นระบบจะเรียกใช้ onPause()
ในนั้น
เมื่อกิจกรรมที่ครอบคลุมกลับมาอยู่เบื้องหน้าและได้รับโฟกัสอีกครั้ง ระบบจะเรียก onResume()
หากกิจกรรมหรือกล่องโต้ตอบใหม่ปรากฏขึ้นที่เบื้องหน้า โดยดึงโฟกัสและบดบังกิจกรรมที่กำลังดำเนินอยู่ทั้งหมด กิจกรรมที่ถูกบดบังจะเสียโฟกัสและเข้าสู่สถานะ "หยุดทำงาน" จากนั้นระบบจะโทรหา onPause()
และ onStop()
ติดต่อกันอย่างรวดเร็ว
เมื่ออินสแตนซ์เดียวกันของกิจกรรมที่ครอบคลุมกลับมาอยู่เบื้องหน้า ระบบจะเรียก onRestart()
, onStart()
และ onResume()
ในกิจกรรม หากเป็นอินสแตนซ์ใหม่ของกิจกรรมที่ครอบคลุมซึ่งทำงานอยู่เบื้องหลัง ระบบจะไม่เรียกใช้ onRestart()
แต่จะเรียกใช้เฉพาะ onStart()
และ onResume()
ผู้ใช้แตะหรือใช้ท่าทางสัมผัส "ย้อนกลับ"
หากกิจกรรมอยู่เบื้องหน้าและผู้ใช้แตะหรือใช้ท่าทางสัมผัส "กลับ" กิจกรรมจะเปลี่ยนผ่านonPause()
,
onStop()
และonDestroy()
callbacks ระบบจะทำลายและนำกิจกรรมออกจากกองซ้อนด้านหลัง
โดยค่าเริ่มต้น ในกรณีนี้ ฟังก์ชันการเรียกกลับ onSaveInstanceState()
จะไม่ทํางาน ลักษณะการทํางานนี้ถือว่าผู้ใช้แตะ "กลับ" โดยไม่ได้คาดหวังว่าจะกลับไปที่อินสแตนซ์เดิมของกิจกรรม
อย่างไรก็ตาม คุณสามารถลบล้างเมธอด onBackPressed()
เพื่อใช้ลักษณะการทำงานที่กำหนดเอง เช่น แสดงกล่องโต้ตอบที่ขอให้ผู้ใช้ยืนยันว่าต้องการออกจากแอป
หากคุณลบล้างเมธอด onBackPressed()
เราขอแนะนําอย่างยิ่งให้คุณยังคงเรียกใช้ super.onBackPressed()
จากเมธอดที่ลบล้าง ไม่เช่นนั้น ลักษณะการกดกลับของระบบอาจทำให้ผู้ใช้สับสน
ระบบหยุดกระบวนการของแอป
หากแอปทำงานอยู่เบื้องหลังและระบบจำเป็นต้องเพิ่มพื้นที่ว่างในหน่วยความจำสําหรับแอปที่ทำงานอยู่เบื้องหน้า ระบบอาจหยุดแอปที่ทำงานอยู่เบื้องหลังonDestroy()
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ระบบตัดสินใจว่าจะทำลายกระบวนการใด โปรดอ่านสถานะกิจกรรมและการขับออกจากหน่วยความจำและกระบวนการและวงจรชีวิตของแอป
ดูวิธีบันทึกสถานะ UI ของกิจกรรมเมื่อระบบหยุดกระบวนการของแอป ได้ที่การบันทึกและการกู้คืนสถานะ UI ชั่วคราว