[ต่อประเด็น] ชำแหละโครงสร้างและหน้าตาของระบบ Android กันดีกว่าครับ

กระทู้สนทนา
ผมขอแตกประเด็น (อีกแล้ว) จากกระทู้นี้
http://pantip.com/topic/30634550
และ
http://pantip.com/topic/30638056

มันก็มีบางส่วนที่ชัดเจน และก็มีบางส่วนที่ยังกำกวม ไม่ตรงประเด็น
และส่วนหนึ่งที่ผมผิดคือตั้งกระทู้ในลักษณะ "อวย" มือถือตระกูล nexus มากเกินไป
ผมก็ขอแยกกระทู้ออกมาเพื่อที่จะเปรียบเทียบกันให้มากขึ้นและลดการอวยทุกชนิดครับ

จริงๆแล้วเรื่องที่ผมกล่าวมาไม่ใช่เรื่องใหม่แต่อย่างใด ก็แค่อยากจะให้รับรู้กันให้กระจ่างและรับรู้ถึงผลกระทบที่ตามมาด้วยครับ
ก่อนเข้าประเด็น มาดูหน้าจอ android ui ของแต่ละค่ายดีกว่าครับ
หน้าจอ android pure google ครับ (เขาเรียกกันว่า vanilla ครับ)

Sense UI ของ HTC ครับ

TouchWiz UI ของ Samsung ครับ

Timescape UI ของ Sony ครับ

และ Optimus UI ของ LG ครับ


ถ้าใครสนใจดูแสดงความเห็นของหน้าจอก็ให้ไปดูที่ลิงก์กระทู้ด้านบนครับ (อันที่ 2 ครับ) เพราะประเด็นคือ
เบื้องหลังความสวยงามของหน้าจอเหล่านี้ แอพพลิเคชันอันทรงพลังของแต่ละค่าย เรามาดูกันว่าสิ่งที่อยู่ข้างหลังมันมีอะไรบ้างครับ

--------------------โครงสร้างของแอนดรอยด์--------------------------------

อ๊ะ ดูภาพแล้วงงไม่เป็นไร ขออธิบายเป็นส่วนๆครับ (ตามสี)
---สีแดง Linux Kernel
เป็นส่วนล่างสุดของระบบ เป็นส่วนที่ติดต่อกับอุปกรณ์ในเครื่อง เป็นส่วนที่ทางผู้ผลิตต้องทำไดรเวอร์ออกมาสำหรับเครื่องรุ่นนั้นๆ

--สีเขียว Libraries
เป็นส่วนการทำงานหลักๆของระบบ เป็นพื้นฐานที่ตัวระบบทำงานได้ โดยตัวแอพจะต้องเข้าไปมองหาว่าในเครื่องมันมีอะไรบ้าง และจะหยิบใช้มันมาได้อย่างไร ซึ่งตัวนี้จะทำงานร่วมกับ framework กับ rumtime ครับ(เป็นส่วนที่อธิบายยากเหมือนกัน) ตัวอย่างเช่น ตัวจัดการฐานข้อมูล ตัวการการแสดงผล การเข้ารหัส การเข้าถึง sensor การวาดภาพสามมิติ เป็นตัน

--สีเหลือง Runtime
เนื่องจากแอพของแอนดรอยพัฒนามาจากภาษา Java และใช้ API ที่ทาง google คิดขึ้นมาเฉพาะเมื่อมันแปลภาษา (compile)มาแล้ว มันไม่สามารถทำงานได้โดยตรง (ซึ่งเรียกมันว่า bytecode) โดยจะต้องอาศัยตัวแปลมันอีกทีนึงเรียกว่า Dalvik VM ซึ่งก็คือตัว Runtime นั่นเอง สาเหตุที่ต้องมีเพราะว่าต้องออกแบบให้มันทำงานได้ในอุปกรณ์พกพาที่มีทรัพยากรจำกัด จะทำให้ขนาดของแอพเล็กลงแต่ต้องแลกมากับประสิทธิภาพลดลงด้วย แต่ถ้าแอพต้องการใช้ทรัพยากรสูงอย่างเกมหรือเครื่องมือพิเศษที่ต้องเขียนในแบบ Native Code ซึ่งจะผ่านตัว Runtime ออกไปครับ

"คือ android มีพื้นฐานมาจากจาวาก็จริง แต่ตัวมันไม่ได้รันบน Java นะครับ (ไม่งั้นตายแน่ ๆ)
คือ ตัว syntax เป็น java ก็จริง แต่เมื่อ compile แล้วมันจะแปลง bytecode เป็น dex อีกที
แล้วรันบน dalvik vm ครับ ซึ่งออกแบบมาสำหรับ platform ที่ resource น้อย ๆ"
อ้างอิงจากคุณ ZeiZeR ความคิดเห็นที่ 3-3 ครับ

--สีน้ำเงิน Application Framework
เป็นส่วนที่เรียกว่าเป็น "กรอบ" ล้อมรอบการทำงานของแอพ เป็นส่วนที่จะบ่งบอกว่า แอพควรจะทำงานอย่างไร หน้าตาเป็นแบบไหน และสื่อสารกับผู้ใช้อย่างไร

"จริง ๆ แล้ว ตัวมันเอง ก็จัดเป็น application เหมือนกันครับ เพียงแต่มันไม่ได้เป็น application ที่จะรันขึ้นมาได้แบบ stand alone
บางตัวมันก็เป็น service เพื่อจะ simplified การพัฒนา บางตัวมันก็เป็น building block ซึ่งก็คล้าย ๆ โปรแกรมกึ่งสำเร็จรูปนั่นหละครับ
แทนที่ application ที่เขียนจะไปเรียก library ตรง ๆ ซึ่งก็คือต้องเขียน code ทุก ๆ สิ่งทุก ๆ อย่างด้วยตัวเอง
ก็ไปเขียนอยู่บน application framework ซึ่งพวก common function ก็มีเตรียมไว้ให้แล้ว ทำให้มันก็ง่ายขึ้นครับ
แต่คำสั่งที่ไม่ได้เรียกจาก application framework เช่น คำสั่งที่ต้องไปติดต่อกับพวก graphic library เป็นต้น ก็ต้องลงไปเรียก library เอง"
อ้างอิงจากคุณ ZeiZeR ความคิดเห็นที่ 35-1 ครับ

--บนสุด Application
ก็ไม่ต้องอธิบายมาก ก็คือแอพที่เรามองเห็นและใช้มันอยู่นั่นเอง

-----------------------------แล้วมันเกี่ยวอะไรกับคนที่จะใช้มันล่ะ ?????-----------------------------------
ก็จะเกิดคำถามที่ว่า "ทำไมเอาแอพในไอโฟนมาลงแอนดรอยด์ไม่ได้ล่ะ" หรือไม่ก็ "ทำไมแอพใน WP ถึงมาช้าจริง"
คำตอบก็คือเพราะตัวโครงสร้างในแต่ละระบบมันแตกต่างกันโดยสิ้นเชิง ทำให้แอพที่ใช้งานอยู่ในอีกระบบหนึ่งไม่สามารถทำงานภายใต้โครงสร้างอีกแบบหนึ่งได้

และคำถาม "ทำไมแอนดรอย์แต่ละยี่ห้อหน้าตาไม่เหมือนกันล่ะ ก็มันมีโครงสร้างเหมือนกันไม่ใช่เหรอ แล้วยังงี้แอพที่ใช้อีกยี่ห้อหนึ่งจะเอามาใช้ในอีกยี่ห้อหนึ่งได้หรือเปล่า"
คำตอบ เนื่องมาจากระบบแอนดรอยด์อนุญาติให้ผู้ผลิตได้ปรับแต่งหน้าตาได้อย่างอิสระทำให้บริษัทผู้ผลิตทั้งหลายพัฒนารูปแบบหน้าตาเฉพาะของตนเองตามรูปหน้าจอข้างต้น และนอกจากนั้นยังอนุญาติให้ผู้ผลิตปรับแต่งโครงสร้าง Application framework (ส่วนสีน้ำเงินในภาพ) และส่วน Library (สีเขียว) ได้บางส่วน เราก็ได้เห็นโทรศัพท์แต่ละยี่ห้อมีลูกเล่นแตกต่างกันไปไม่ว่าจะเป็นการใช้ปากกา ,การแบ่งสองหน้าจอ เพิ่มเอฟเฟคกล้อง การแต่งเสียง และอื่นๆอีกมาก ซึ่งเป็นกลยุทธการการตลาดของแต่ละเจ้าด้วยครับ
อ้อ แอพที่สามารถใช้งานได้กับยี่ห้อหนึ่งสามารถทำงานได้กับอีกยี่ห้อหนึ่งได้ครับเพราะโครงสร้างเดียวกันครับนอกเสียจากว่ามีการปรับแต่งตัวโครงสร้างที่แตกต่างไปจากนยี่ห้ออื่น (เห็นได้ชัดก็ kindle อ่ะนะ)

คำถามต่อเนื่องจากเมื่อกี้ "เมื่อแต่ละยี่ห้อปรับแต่งตัวแอนดรอยด์เอง แล้วไปปรับแต่งส่วนไหนบ้าง"
ตอบ : ส่วนที่บริษัทผู้ผลิตทำการปรับแต่งก็มี
ส่วน Linux Kernel (สีแดง) เพราะต้องทำไดรเวอร์ของแต่ละรุ่น
และส่วน Application Framework (สีน้ำเงิน) เพื่อปรับเพิ่มฟีเจอร์ครับ
และส่วน Libraries (สีเขียว) ครับ
ซึ่งส่วน Runtime ส่วนนี้เขาจะไม่ปรับแต่งครับเพราะจะส่งผลให้การทำงานของแอพมีปัญหาได้ครับ

ย้อนมาดูที่ UI กันบ้าง รูปแบบ UI ที่แตกต่างกันขนาดนี้ส่งผลกับผู้ใช้อย่างไรบ้าง
1. การเรียนรู้ใช้งาน ถึงแม้จะเป็นระบบแอนดรอยด์เหมือนกัน แต่หน้าตาไม่เหมือนกันก็ส่งผลต่อการใช้งานด้วยบางคนที่คุ้นชินกับยี่ห้อหนึ่ง แต่พอมาใช้อีกยี่ห้อหนึ่งก็จะงงไปสักพักเพราะตำแหน่งเมนูต่างๆมันไม่ได้อยู่ที่เดิม คนที่มือใหม่หัดเล่นก็หาตำรามาดูก็งงเพราะหน้าจอภาพตัวอย่างกับมือถือตัวเองนั้นคนละแบบกัน มันกลับกลายเป็นว่า "ใช้ยาก" (โดยเฉพาะสาวก ios ที่เพิ่งย้ายค่ายนี่แหละตัวดีเลย ผมเจอมาหลายคนแล้ว)

2. แอพ จากข้อความที่ยกมาว่าแอพเดียวกันสามารถใช้งานด้วยกันได้ แต่เดี๋ยวก่อน มันทำงานได้ก็จริง มันก็จะมีบางส่วนที่มีปัญหา อย่างเช่น เปิดกล้องหน้าไม่ได้กับอีกรุ่นเปิดได้ การแสดงผลผิดเพี้ยนเพราะขนาดหน้าจอไม่เท่ากัน บางรุ่นโหลดแอพได้ บางรุ่นโหลดไม่ได้ และอื่นๆ คำถามคือ มันเป็นหน้าที่ dev ไม่ใช่เหรอที่จะต้องทำแอพให้เข้ากับเครื่อง มันก็จริงส่วนหนึ่งครับ ซึ่งปัญหาความแตกต่างของระบบแต่ล่ะรุ่นแต่ละยี่ห้อนั้นเรียกว่า Fragmentation ครับ อ่านเพิ่มเติมได้ที่นี่
http://www.blognone.com/node/32548

ไหนๆก็กล่าวถึงปัญหา Fragmentation ก็เล่าต่อเลย
คำถาม : แล้วมันเกี่ยวกับ UI ตรงไหนเนี่ย
คำตอบ : Fragmentation คือความหลากหลายขอตัวเครื่องและตัวระบบเอง ซึ่งตัว UI แต่ละเจ้าก็ถือว่าเป็น Fragmentation เหมือนกันครับ

------------------------ปัญหา Fragmentation มีผลกับผู้ใช้งานอย่างไร ---------------------
1.ผู้ใช้สับสน เพราะไม่รู้จะเอาแบบไหนดี แบบว่าเอาหน้าจอขนาด xx นิ้วแต่มีทุกยี่ห้อเลย ก็ลังเลว่าจะเอาอะไร แต่ทีนี้เล็งไว้แล้วว่าจะเอารุ่นนี้ แต่ไปดูจริงๆ อ้าวเครื่องนั้นหน้าจอใหญ่กว่า เพิ่มเงินนิดเดียว ก็จะเกิดการลังเล สับสน
2.ปัญหาแอพที่ได้กล่าวไว้ข้างต้น
3.การอัพเกรดเวอร์ชันแอนดรอยด์ที่ไม่ได้ทุกรุ่น ดูได้จากที่นี่ (เก่าแล้วแต่ก็ยังเป็นปัญหาเหมือนเดิม)
http://droidsans.com/android-fragmentation-chart

ขนาดหน้าจอของเครื่องที่ใช้แอนดรอยด์ (เอาของซัมซุงมาเพราะมันครอบคลุมสุดแล้วกะเหมาหมดเลยว่างั้น)


และปัญหาแอพที่พัฒนาช้าอันเนื่องมาจากปัญหาเดียวกัน
http://droidsans.com/android-developer-pain

ต้องเทสด้วยเครื่องทั้งหมดนี่ น่าสงสาร dev นะครับ

เนื่องด้วยปัญหานี้เป็นปัญหาระดับชาติของ android ทางกูเกิลก็ต้องขยับตัวเพื่อลดปัญหาดังกล่าว จากที่มา
http://droidsans.com/google-start-solving-android-fragmentation
และ http://www.blognone.com/news/28836/%E0%B8%81%E0%B8%B9%E0%B9%80%E0%B8%81%E0%B8%B4%E0%B8%A5%E0%B8%9A%E0%B8%B1%E0%B8%87%E0%B8%84%E0%B8%B1%E0%B8%9A-%E0%B8%AD%E0%B8%B8%E0%B8%9B%E0%B8%81%E0%B8%A3%E0%B8%93%E0%B9%8C%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%A3%E0%B8%B1%E0%B8%99-ics-%E0%B8%88%E0%B8%B0%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%A1%E0%B8%B5%E0%B8%98%E0%B8%B5%E0%B8%A1%E0%B8%A1%E0%B8%B2%E0%B8%95%E0%B8%A3%E0%B8%90%E0%B8%B2%E0%B8%99-holo-%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87%E0%B8%AD%E0%B8%A2%E0%B8%B9%E0%B9%88%E0%B9%80%E0%B8%AA%E0%B8%A1%E0%B8%AD

ในเรื่องโครงสร้างระบบและปัญหาหน้าจอก็ขอเพียงเท่านี้ มีอะไรเสนอแนะอย่างไรก็แสดงความคิดเห็นได้ครับ
(จะชม วิจารณ์ ด่า ก่อดราม่า ก็แล้วแต่ท่านครับ)
*แก้ไขข้อมูลใหม่จากความคิดเห็นด้านล่างครับ
แก้ไขข้อความเมื่อ

แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่