Monday, 4 June 2012

Save State Before Killed!

Category: Android Development

Application ที่ Run อยู่ อาจถูก Killed ตอนไหนก็ได้ ถ้าหากว่า System อยู่ในสภาวะ Low Resources แล้วเราจะรู้ได้อย่างไรว่าเมื่อไหร่ที่ Application ของเราจะถูก Killed ? แล้วเราบันทึกข้อมูลตอนไหน ?

Android เตรียม Event Handler พิเศษมาไว้สำหรับในการบันทึก State ก่อนที่ Application จะถูก Killed ไว้ให้ดังนี้



onSaveInstanceState(Bundle outstate)

Event Handler นี้จะมีการส่ง Bundle Object มาให้ ซึ่งเอาไว้ให้เราบันทึก Data อะไรก็ตามที่เราอยากจะ restore กลับมาในภายหลัง เราบันทึกข้อมูลผ่าน Bundle Object โดยอาศัย Methods ที่เตรียมไว้ให้ อย่างเช่น outState.putString หรือ outState.putBoolean โดยใช้การกำหนด Key ในการบันทึกข้อมูลแต่ละค่า ทำนองเดียวกัน เวลาที่ Restore ข้อมูลกลับคืนมาในภายหลัง เราก็จะใช้ Key เดียวกัน

ภายหลัง เมื่อ Activity ที่ถูก Killed ถูกเรียกใช้งานอีกครั้ง System ก็จะเรียก onCreate() พร้อมทั้งส่งค่า Bundle Object ที่เราได้บันทึกเอาไว้ใน onSaveInstanceState มาให้ เราก็เพียงแค่เรียกข้อมูลที่บันทึกไว้กลับคืนมา

onSaveInstanceState() จะถูกเรียกก็ต่อเมื่อ System คิดว่าเราอาจจำเป็นต้อง Restore Activity ในภายหลัง ซึ่ง onSaveInstanceState() จะไม่ถูกเรียก ในกรณี เช่น User กดปุ่ม Back ด้วยเหตุนี้เราจึงไม่ควรบันทึก User Data ภายใน onSaveInstanceState() สิ่งที่ควรบันทึกใน onSaveInstanceState() ควรเป็นข้อมูลสำคัญที่ใช้เพื่อการแสดงผลบน Screen

แหล่งที่มา: หนังสือ Creating Android Applications ของ Chris Haseman

No comments:

Post a Comment