อัปเดตเมษายน 2556: อย่าทำเช่นนี้ ไม่ใช่ความคิดที่ดีในปี 2009 เมื่อฉันตอบคำถามครั้งแรกและตอนนี้มันไม่ใช่ความคิดที่ดีจริงๆ ดูคำตอบโดย hackbod นี้ด้วยเหตุผล:
หลีกเลี่ยงการโหลดกิจกรรมใหม่ด้วย asynctask เกี่ยวกับการเปลี่ยนทิศทางใน Android
เพิ่มandroid:configChanges="keyboardHidden|orientation"
ใน AndroidManifest.xml ของคุณ สิ่งนี้บอกระบบว่าการเปลี่ยนแปลงการกำหนดค่าที่คุณกำลังจะจัดการกับตัวเองคืออะไรในกรณีนี้โดยไม่ทำอะไรเลย
<activity android:name="MainActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
ดูที่การอ้างอิงผู้พัฒนาconfigChanges สำหรับรายละเอียดเพิ่มเติม
อย่างไรก็ตามแอปพลิเคชันของคุณสามารถถูกขัดจังหวะได้ตลอดเวลาเช่นโดยการโทรศัพท์ดังนั้นคุณควรเพิ่มรหัสเพื่อบันทึกสถานะแอปพลิเคชันของคุณเมื่อถูกหยุดชั่วคราว
อัปเดต:ตั้งแต่ Android 3.2 คุณต้องเพิ่ม "screenSize":
<activity
android:name="MainActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize">
จากคู่มือนักพัฒนาซอฟต์แวร์การจัดการการกำหนดค่าเปลี่ยนตัวเอง
ข้อควรระวัง: เริ่มต้นด้วย Android 3.2 (ระดับ API 13) "ขนาดหน้าจอ" จะเปลี่ยนไปเมื่ออุปกรณ์สลับระหว่างแนวตั้งและแนวนอน ดังนั้นหากคุณต้องการป้องกันไม่ให้รันไทม์รีสตาร์ทเนื่องจากการเปลี่ยนแปลงการวางแนวเมื่อพัฒนาสำหรับ API ระดับ 13 หรือสูงกว่า (ตามที่ประกาศโดยแอ็ตทริบิวต์ minSdkVersion และ targetSdkVersion) คุณต้องรวมค่า "screenSize" เพิ่มเติมจากค่า "การวางแนว" android:configChanges="orientation|screenSize"
นั่นคือคุณจะต้องประกาศ
อย่างไรก็ตามหากแอปพลิเคชันของคุณกำหนดเป้าหมาย API ระดับ 12 หรือต่ำกว่ากิจกรรมของคุณจะจัดการกับการเปลี่ยนแปลงการกำหนดค่านี้เสมอ (การเปลี่ยนแปลงการกำหนดค่านี้จะไม่เริ่มกิจกรรมของคุณใหม่แม้ว่าจะทำงานบนอุปกรณ์ Android 3.2 หรือสูงกว่า)