พื้นหลังด่วน
ตามค่าเริ่มต้นเมื่อการเปลี่ยนแปลงการกำหนดค่าคีย์บางอย่างเกิดขึ้นบน Android (ตัวอย่างทั่วไปคือการเปลี่ยนการวางแนว) Android จะรีสตาร์ทกิจกรรมที่รันอยู่อย่างเต็มที่เพื่อช่วยในการปรับการเปลี่ยนแปลงดังกล่าว
เมื่อคุณกำหนดandroid:configChanges="keyboardHidden|orientation"
ใน AndroidManifest ของคุณคุณกำลังบอก Android: "โปรดอย่าทำการรีเซ็ตเริ่มต้นเมื่อดึงคีย์บอร์ดออกหรือหมุนโทรศัพท์ฉันต้องการจัดการกับตัวเองใช่ฉันรู้ว่าฉันกำลังทำอะไรอยู่ "
นี่เป็นสิ่งที่ดีหรือไม่? เราจะได้เห็น ...
ไม่ต้องห่วง?
หนึ่งในข้อดีที่คุณเริ่มต้นคือมี:
ไม่จำเป็นต้องกังวลเกี่ยวกับกิจกรรมของคุณที่ถูกหมุน
ในหลายกรณีคนเข้าใจผิดเชื่อว่าเมื่อพวกเขามีข้อผิดพลาดที่จะถูกสร้างขึ้นโดยการเปลี่ยนแปลงการปฐมนิเทศ ( "หมุน") android:configChanges="keyboardHidden|orientation"
แล้วพวกเขาก็สามารถแก้ไขได้โดยการวางใน
อย่างไรก็ตาม android: configChanges = "keyboardHidden | ปฐมนิเทศ" ไม่มีอะไรมากไปกว่า bandaid ความจริงมีหลายวิธีที่การเปลี่ยนแปลงการกำหนดค่าสามารถถูกเรียกใช้ ตัวอย่างเช่นหากผู้ใช้เลือกภาษาใหม่ (เช่นสถานที่มีการเปลี่ยนแปลง) กิจกรรมของคุณจะเริ่มต้นใหม่ในลักษณะเดียวกับที่มันทำโดยการเปลี่ยนทิศทาง หากคุณต้องการคุณสามารถดูรายการการเปลี่ยนแปลงการกำหนดค่าได้ทุกประเภท
แก้ไข : ที่สำคัญกว่านั้นเมื่อแฮ็คโบดชี้ให้เห็นในความคิดเห็นกิจกรรมของคุณจะเริ่มต้นใหม่เมื่อแอปของคุณอยู่ในพื้นหลังและ Android ตัดสินใจที่จะเพิ่มหน่วยความจำบางส่วนด้วยการฆ่ามัน เมื่อผู้ใช้กลับมาที่แอปของคุณ Android จะพยายามเริ่มกิจกรรมใหม่ในลักษณะเดียวกับที่ทำถ้ามีการเปลี่ยนแปลงการกำหนดค่าอื่น ๆ หากคุณไม่สามารถจัดการได้ - ผู้ใช้จะไม่มีความสุข ...
กล่าวอีกนัยหนึ่งการใช้android:configChanges="keyboardHidden|orientation"
ไม่ใช่ทางออกสำหรับ "ความกังวล" ของคุณ วิธีที่ถูกต้องคือการกำหนดรหัสกิจกรรมของคุณเพื่อให้พวกเขามีความสุขกับการรีสตาร์ท Android ทุกครั้ง นี่เป็นวิธีปฏิบัติที่ดีที่จะช่วยคุณให้คุ้นเคยกับถนน
ดังนั้นเมื่อไรฉันจึงควรใช้
ดังที่คุณกล่าวถึงมีข้อได้เปรียบที่แตกต่าง เขียนทับการเปลี่ยนแปลงการกำหนดค่าเริ่มต้นสำหรับการหมุนโดยการจัดการด้วยตัวคุณเองจะช่วยเพิ่มความเร็ว อย่างไรก็ตามความเร็วนี้มาพร้อมกับราคาที่สะดวกสบาย
หากต้องการใช้เลย์เอาต์แบบเดียวกันสำหรับทั้งแนวตั้งและแนวนอนคุณจะอยู่ในสภาพดีโดยการเขียนทับ แทนที่จะรีโหลดกิจกรรมเต็มรูปแบบมุมมองจะเปลี่ยนไปรอบ ๆ เพื่อเติมเต็มพื้นที่ที่เหลืออยู่
อย่างไรก็ตามหากคุณใช้เลย์เอาต์ที่แตกต่างกันด้วยเหตุผลบางประการเมื่ออุปกรณ์อยู่ในแนวนอนความจริงที่ว่า Android จะโหลดกิจกรรมของคุณใหม่เพราะมันจะโหลดเค้าโครงที่ถูกต้อง [หากคุณใช้การแทนที่ในกิจกรรมดังกล่าวและต้องการทำเลย์เอาต์ที่มีมนต์ขลังขณะใช้งานจริง ๆ ... ขอให้โชคดี - มันไม่ง่ายเลย]
สรุปด่วน
โดยทั้งหมดหากandroid:configChanges="keyboardHidden|orientation"
เหมาะสมกับคุณแล้วให้ใช้ แต่โปรดแน่ใจว่าได้ทดสอบสิ่งที่เกิดขึ้นเมื่อมีการเปลี่ยนแปลงบางอย่างเนื่องจากการเปลี่ยนแปลงการวางแนวไม่ใช่วิธีเดียวที่การเรียกใช้การรีสตาร์ทแบบเต็มกิจกรรม