ในที่สุด! วันนี้ก็มีคำตอบกระจ่างชัดมาให้อ่านซักที โดยพนักงานแผนก Android 2 คน ออกมาประกาศเหตุผลว่าทำไมการใช้งานมันถึงดูไม่ลื่นไหล สบายตาเหมือนกับระบบปฏิบัติการดังตัวอื่นๆ
คนแรกคือ Dianne Hackborn อยู่ในทีมเขียน Framework ออกมาบอกรายละเอียดทางด้านเทคนิก (เทคนิกจ๋ามากๆ ถ้าไม่ได้ศึกษาด้านนี้มาระดับหนึ่งอาจจะงงได้) ผมอ่านแค่คร่าวๆ
https://plus.google.com/105051985738280261832/posts/2FXDCz8x93s
คนที่สองคือ Andrew Munn เป็นอดีตเด็กฝึกงาน (Intern) อยู่ในทีม Android ไม่มีลงเรื่องทางเทคนิกมาก ใครไม่ได้เรียนทางคอมฯ แนะนำให้อ่านอันนี้นะ มีอธิบายถึงทางแก้ไขด้วย
https://plus.google.com/100838276097451809262/posts/VDkV9XaJRGS
สรุปสาเหตุหลัก ได้คร่าวๆ แบ่งเป็นสี่ข้อ
- UI Process - ของ Android จะทำงานใน Normal Priority แถมเป็น Thread แบบปกติเทียบเท่ากับ App หรือการทำงานส่วนอื่นๆ เมื่อเปรียบเทียบกับ iOS ที่ทำงานแบบ Real-time Priority ใน UI Thread เฉพาะ ซึ่งจะทำงานได้เร็วกว่ามาก แต่เมื่อผู้ใช้ทำงานกับ UI การทำงานส่วนอื่นๆ เช่น การเรนเดอร์เว็บเพจก็จะหยุดเพื่อมาทำการเรนเดอร์ ซึ่งตรงข้ามกับ Android ที่จะทำงานหลายๆ อย่างไปพร้อมกันได้ แบบ "พอใช้" (ซึ่งก็หมายถึงกระตุกนั่นแหละ -*-)
- Hardware Acceleration - เมื่อก่อนสามารถเรียกให้ทำงานได้แค่ Native App UI อันนี้แก้ไขแล้วใน Android 4.0 Ice Cream Sandwich
- Garbage Collection (GC) - อันนี้เป็นปัญหาด้านประสิทธิภาพที่ Dalvik VM ซึ่ง Android รันอยู่ ในบางสถานการณ์ GC ก็จะทำงาน เช่นใน Photo Gallery ทำให้การแสดงผลหยุดชะงัก ทำให้ต้องจำกัดการแสดงผลไว้ที่ 30fps จาก 60fps
- UI Views - Android จะต้องโหลด UI View ใหม่ทุกครั้งที่ทำการเรียกใช้ ตรงข้ามกับ iOS ที่เก็บทุก views ไว้ในหน่วยความจำตั้งแต่แรก (อันนี้เข้าใจว่าเป็นผลมาจากประสิทธิภาพการจัดการหน่วยความจำของ byte code ของ Android ที่ไม่ดีเท่ากับ native code ของ iOS, WP และอื่นๆ)
แถมรีวิว Android 4.0 ICS รุ่นล่าสุดมาให้ดูด้วย เผื่อสงสัยว่าดีขึ้นขนาดไหนแล้ว