สำหรับ Android app นั้นปัญหาที่ทำให้ app crash น่าจะมีอยู่สองปัญหาใหญ่ ๆ คือ
- NullPointerException (NPE)
- OutOfMememoryError (OOM) หรือ Memory Leak
เริ่มต้นด้วย Error ที่จะเจอแสดงผลดังนี้
[gist id="23cd52fd5b238cc0e685e4f4762223d3" file="1.txt"] สำหรับ Android app นั้นมันเกิดขึ้นได้ง่ายมาก ๆ ถ้านักพัฒนาไม่มีความรู้ความเข้าใจมากนักและไม่ระมัดระวังเพียงพอ มีต้นเหตุหลัก ๆ ดังนี้- ใช้ memory แล้วไม่คืนกลับไปยังระบบ
- มีการใช้ memory มากกว่าที่มีหรือที่จองไว้
มีอะไรบ้างละที่ทำให้เกิดปัญหา Memory Leak ใน Android
เก็บข้อมูลแบบ global ใน Context object มาเกินไป คำถามคือ คุณรู้ไหมว่า App คุณนั้นเก็บข้อมูลอะไรไว้ใน Context บ้าง ? ถ้าไม่รู้จงทำให้รู้ซะ ต่อมาเรื่องของ Activity เนื่องจาก Activity นั้นเป็น subclass ของ Context ดังนั้นปัญหาจาก Context จึงส่งต่อมาด้วยเสมอ ใน Activity มีข้อมูลอะไรที่เป็น static หรือไม่ ? ปัญหาหลัก ๆ เลยก็เช่น View, Drawable เป็นต้น ยังไม่พอนะ ยังมีพวก static variable ต่าง ๆ ที่นักพัฒนาอาจจะรู้และไม่รู้ รวมทั้งการ bind/unbind service ต่าง ๆ รวมทั้งการ register/unregister service ต่าง ๆ รวมทั้งขาดความรู้และเข้าใจ framework/library ที่นำมาใช้งานอีกด้วย ยังไม่เรื่องการใช้งาน extenal resource อื่น ๆ อีก เช่น Network เป็นต้น ลองคิดดูสิว่า ถ้าส่ง request ไปบ่อย ๆ ลองคิดดูสิว่า ถ้ารอ response นาน ๆ หรือเขียน code ไม่ดี ให้ทำการวน loop รอไปเรื่อย ๆ !!ดังนั้นอย่าเก็บข้อมูลหรือ state ที่เกี่ยวข้องกับ Life cycle ของ Activity ไว้นาน ๆ จะเห็นได้ว่า เราต้องเข้าใจ Life Cycle ของ Activity ให้ดีด้วยนะ