ก่อนอื่นให้ลองดูโพสต์ของฉันในส่วนที่ถูกเก็บ มันอาจช่วยได้
ตอนนี้เพื่อตอบคำถามของคุณ:
ส่วนย่อยยังคงสถานะมุมมองหรือไม่หรือสิ่งนี้จะถูกสร้างขึ้นใหม่เมื่อมีการเปลี่ยนแปลงการกำหนดค่า - "คงไว้" คืออะไร?
ใช่Fragmentสถานะของจะคงอยู่ตลอดการเปลี่ยนแปลงการกำหนดค่า โดยเฉพาะ "เก็บไว้" หมายความว่าชิ้นส่วนจะไม่ถูกทำลายในการเปลี่ยนแปลงการกำหนดค่า นั่นคือFragmentจะถูกเก็บรักษาไว้แม้ว่าการเปลี่ยนแปลงการกำหนดค่าจะทำให้ข้อมูลอ้างอิงActivityถูกทำลาย
ส่วนจะถูกทำลายเมื่อผู้ใช้ออกจากกิจกรรมหรือไม่
เช่นเดียวกับActivitys ระบบFragmentอาจถูกทำลายเมื่อทรัพยากรหน่วยความจำเหลือน้อย ไม่ว่าคุณจะมีชิ้นส่วนของคุณรักษารัฐอินสแตนซ์ของพวกเขาข้ามเปลี่ยนแปลงการกำหนดค่าจะไม่มีผลกระทบหรือไม่ว่าระบบจะทำลายFragments Activityเมื่อคุณออกจาก หากคุณออกจากActivity(เช่นโดยการกดปุ่มโฮม) Fragments อาจจะถูกทำลายหรือไม่ หากคุณออกจากการActivityกดปุ่มย้อนกลับ (เช่นการโทรfinish()และทำลายอย่างมีประสิทธิภาพActivity) Activitys ที่แนบมาทั้งหมดFragmentจะถูกทำลายเช่นกัน
ทำไมมันไม่ทำงานกับเศษเล็กเศษน้อยในกองหลัง?
อาจมีสาเหตุหลายประการที่ไม่รองรับ แต่เหตุผลที่ชัดเจนที่สุดสำหรับฉันคือการActivityอ้างอิงFragmentManagerและการFragmentManagerจัดการ backstack นั่นคือไม่ว่าคุณจะเลือกที่จะเก็บไว้Fragmentหรือไม่ก็ตามActivity(และดังนั้นFragmentManagerแบ็คสต็อกของ) จะถูกทำลายในการเปลี่ยนแปลงการกำหนดค่า อีกเหตุผลหนึ่งที่ทำให้มันใช้งานไม่ได้เพราะสิ่งต่าง ๆ อาจมีความยุ่งยากหากทั้งชิ้นส่วนที่เก็บไว้และชิ้นส่วนที่ไม่ได้รับการเก็บรักษาได้รับอนุญาตให้อยู่บน backstack เดียวกัน
กรณีการใช้งานแบบไหนที่เหมาะสมกับการใช้วิธีนี้?
ชิ้นส่วนที่เก็บไว้จะมีประโยชน์มากสำหรับการเผยแพร่ข้อมูลสถานะโดยเฉพาะการจัดการเธรด - ข้ามอินสแตนซ์ของกิจกรรม ตัวอย่างเช่นแฟรกเมนต์สามารถใช้เป็นโฮสต์สำหรับอินสแตนซ์ของThreadหรือAsyncTaskการจัดการการดำเนินการ ดูโพสต์บล็อกของฉันในหัวข้อนี้สำหรับข้อมูลเพิ่มเติม
โดยทั่วไปแล้วฉันจะถือว่ามันเหมือนกับการใช้onConfigurationChangedกับActivity... อย่าใช้มันเป็น bandaid เพียงเพราะคุณขี้เกียจเกินกว่าที่จะนำไปใช้ / จัดการกับการเปลี่ยนทิศทางได้อย่างถูกต้อง ใช้งานได้เฉพาะเมื่อคุณต้องการ