"You are not perfect..., that's why you are perfect."
รู้ไว้ใช่ว่า ความละเอียดจอมือถือแอนดรอยด์ส่งผลต่อจำนวนแอปที่เปิดค้างไว้ได้
23 Sep 2015 19:29   [23334 views]

เผอิญเห็นบล็อกใน DroidSans เรื่อง ทดสอบ RAM 4 GB ของ Note 5 และ Zenfone2 กับการใช้งาน Multitasking รุ่นไหนเปิดแอปได้มากกว่ากัน ? ที่บอกว่า Zenfone 2 สามารถเปิดแอปค้างไว้ได้เยอะกว่า Note 5 ร่วม 80% เลย ก็ทำให้ภาพในความทรงจำเมื่อครั้งโบราณกาลลอยออกมา

ว่าจะเขียนบล็อกเกี่ยวกับเรื่องนี้ตั้งนานแล้วนี่นา ลื้มมมม -0-

ดีเลยดีเลย วันนี้ก็เลยเอามาเขียนให้อ่านกันสั้นๆครับถึงผลกระทบที่ตามมาจากหน้าจอที่ละเอียดขึ้น นอกจากจะทำให้แบตหมดแล้ว ยังกินแรมขึ้นอย่างมีนัยสำคัญอีกด้วย

จอละเอียดขึ้นก็กินแรมขึ้น

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

แต่ในแง่จำนวนพิกเซลแล้ว ... ต่างกันมาก นี่เอามาเทียบให้ดูระหว่าง Nexus S, Nexus 4, Nexus 5 และ Nexus 6 ตามลำดับคร้าบผม

ก็ต่างกัน 1.5-2 เท่าเลย ไม่น้อยนะ ไม่น้อย

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

นี่คือผลการทดลองสร้างแอป Hello World ที่แทบไม่มีอะไร แล้วลองรันบน Genymotion ตัว Nexus 4, Nexus 5 และ Nexus 6 ที่รัน Android 5.0.0 เพื่อควบคุม Environment ของระบบ โดยพื้นที่สีฟ้าคือพื้นที่แรมที่ถูกใช้งานจริงอยู่ในขณะนั้น

ก็จะเห็นว่าแอปกินแรมขึ้นตามปริมาณพิกเซลแบบเกือบๆพอดี Nexus 5 จอละเอียดกว่า Nexus 4 อยู่ 2.1 เท่า ก็กินแรมมากกว่าราวๆ 2 เท่าพอดี

ส่วน Nexus 6 ก็กินแรมกว่า Nexus 5 ราวๆ 1.3 เท่า แต่หน้าจอละเอียดกว่า 1.77 เท่า ซึ่งที่มันไม่ได้เพิ่มขึ้นตรงไปตรงมาแบบ Linear ก็เพราะว่าแรมที่มันใช้ ไม่ได้ใช้ในการแสดงผลอย่างเดียวนั่นเอง มันเลยมีปัจจัยอื่นเข้ามาร่วมด้วย แต่โดยรวมแล้ว

มือถือยิ่งจอละเอียด แอปจะยิ่งกินแรมเยอะขึ้นเสมอ ส่วนจะมากจะน้อยก็ขึ้นอยู่กับแอปนั้นๆอีกทีนึง

นอกจากนั้นหากแอปมีภาพเยอะ ภาพที่ต้องจองในแรมก็จะเยอะขึ้นตามจำนวนพิกเซลเช่นกัน แรมก็กินเข้าไปสิ ส่วนแอปไหนเป็น Flat ก็สบายหน่อย ...

เห็นพักหลังมีมือถือจอละเอียดมากๆออกมาขาย จอสวยก็จริงครับ แต่ใครที่เป็น Super User หน่อยและกังวลเรื่อง Multitasking ก็ต้องเข้าใจไว้ด้วยว่า จะที่ละเอียดกว่าก็จะมาพร้อม "การกินแรมเพิ่มขึ้นอย่างมีนัยสำคัญ" ด้วยเช่นกัน

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

การ Handle กรณี Memory เต็ม

ถามว่าในทางปฏิบัติแล้ว แรมจะถูกกินกับอะไรมากที่สุด? ตอบได้เลยครับ "รูปภาพ"

ซึ่งภาพที่จะเอามาแสดงก็จะต้องถูกแคชใน Memory เป็นพิกเซลๆ กินแรมกันไปตามความละเอียดหน้าจออย่างโหดร้าย

จริงๆแอนดรอยด์ทำมาดีมากครับ มันมี Mechanic ในการแจ้งเตือนว่าเครื่องแรมน้อยแล้วนะ เราก็สามารถไล่เคลียร์ภาพใน Memory Cache ทิ้งได้เพื่อรักษา Activity ไว้ หากทุกแอปทำนะ เราจะสามารถสลับแอปกันได้หลายสิบแอปหรืออาจจะเป็นร้อยแอปเลยหละ

ปัญหาคือ แอปส่วนใหญ่ไม่ทำกัน ก็เลย ... นั่นแหละ น่าเสียดาย ไม่งั้นเราคงไม่ต้องมานั่งพูดถึงเรื่องปริมาณแอปที่เปิดได้กันละ พูดถึงทฤษฎีไปก็คงไม่มีประโยชน์ นี่เป็นเรื่องทางปฏิบัติที่ควรทำความเข้าใจความเป็นจริง

การบันทึก Instance State ของ Activity

อ้อๆๆๆๆ จริงๆระบบของแอนดรอยด์มันมีการบันทึกสภาพของหน้าตาอยู่นะ ถึงแอปจะโดนทำลายทิ้ง บางทีเราก็ดูไม่ออกหรอกว่าโดนทำลาย โดยเฉพาะอย่างยิ่งเครื่องที่ CPU และแรมทำงานเร็วๆ ดูแทบไม่ออกเลยหละ โดนทำลายแล้วตอนกลับมาก็หน้าตาเหมือนเดิมเด๊ะะะะจนดูเหมือนมันไม่ได้โดนทำลาย แล้วก็ปรบมือรัวๆว่ามันไม่ตาย จริงๆมันตายไปแล้วแต่มันเขียนพินัยกรรมไว้ ... ดังนั้นหลายๆทีการทดสอบด้วยการจิ้มๆอาจจะโดนหลอกได้เหมือนกัน พวกนี้ต้องทดสอบด้วยวิธีอื่นที่ตรงไปตรงมากว่า

ส่วนเกมเนี่ยมักจะไม่สามารถเก็บสภาพของแอปได้นะครับ เพราะเกมมักจะทำมาในรูปแบบของ Game Engine เช่น Unity3D ซึ่งพวกนั้นไม่มี Mechanic ในการรักษาสภาพหน้าตานั่นเอง ทำได้แค่เก็บ State แล้วก็เริ่มโหลดเกมใหม่และ Continue ต่อ พวกนี้มีเกมจำนวนมากทำอยู่ ซึ่งก็ยังดี๊

ปัจจัยของ Launcher

ส่วนอีกปัจจัยนึงที่ทำให้เปิดแอปทิ้งไว้ได้น้อยลงคือ Launcher แต่นั่นไม่ได้ส่งผลมากเท่ากับจำนวนพิกเซลหน้าจอที่เพิ่มขึ้น

Launcher เทียบได้กับแอปแอปนึงที่รันตลอดเวลา (แต่ก็โดน Kill ทิ้งได้เช่นกัน) หาก Launcher กินแรมเยอะ ก็จะเท่ากับเบียดบังพื้นที่ในแรมไปเท่ากับแอป 3-4 ตัว และทำให้ปริมาณแอป แต่ก็จะกระทบในลักษณะของตัวบวก ในขณะที่การเพิ่มของจำนวนพิกเซลจะกระทบในลักษณะของตัวคูณ

ดังนั้นแล้ว การเปลี่ยน Launcher ก็จะเพิ่มจำนวนแอปที่เปิดค้างไว้ได้อีกเล็กน้อย ซึ่งน่าจะเป็นวิธีเดียวแล้วมั้งที่ทำได้ น่าจะไม่มีทางเลือกอะไรแล้ว ซื้อมือถือมาแล้วแล้วจะไปส่งศูนย์ขอลดความละเอียดหน้าจอก็คงโดนไล่ออกมา ...

ส่วนตัวแล้วเลือกซื้อมือถือแค่ 1080p แหละ เพราะตาก็เริ่มแยกไม่ออกแล้ว แถมประหยัดแบตกว่าและ Multitasking ได้ดีกว่า (แต่เรื่องแบตก็ไม่เสมอไปแหละ ต้องดูว่า CPU อะไรด้วยและกี่ nm ไรงี้)

แต่นั่นเพราะเราคงอยู่ในโหมด Android Developer ที่เริ่มมองเห็นมือถือแอนดรอยด์ทุกเครื่องเหมือนกันและคิดว่าเรื่องแบตสำคัญกว่า แต่สำหรับผู้ใช้ เอาที่ซื้อมาแล้วรู้สึกแฮปปี้แหละครับ แต่ควรรู้เรื่องพวกนี้ไว้เผื่อจะประกอบการตัดสินได้บ้าง

ปัจจัยเรื่องรอม

อันนี้แถมๆ คือว่านะคือว่า แอนดรอยด์มันเป็น Open Source ก็เลยมีคนโมรอมกันไปตามเรื่องตามราว

ดังนั้นถามว่ารอมเกี่ยวมั้ย? ตอบได้ว่าเกี่ยวครับ ถ้ามันจูนไม่ดีหรือออกแบบแบบงงๆก็บอกลา Multitasking ได้เลย

สำหรับ Note 5 นี่เป็นกรณีพิเศษที่ชอบ Kill แอปรัวๆ น่าจะเป็นมาตั้งแต่ S6 หรือก่อนหน้านั้นแล้ว

ไม่รู้เลยจริงๆว่าทำไมซัมซุงถึงโมรอมออกมาแบบนี้ แต่บอกได้ว่าไม่ปกติหละ

สุดท้ายก็น่าจะเห็นภาพละเนอะว่ามันมีปัจจัยหลายอย่างเหมือนกัน แต่สำหรับเรื่องหน้าจอที่ละเอียดขึ้นก็หลีกเลี่ยงเรื่องการกินแรมที่เพิ่มขึ้นไม่ได้เลย ทีนี้ก็ขึ้นอยู่กับผู้ผลิตแล้วที่จะแก้ปัญหาได้หรือจะทำให้มันกลายเป็นวิกฤติขึ้นมา ...

จบคร้าบ สวัสดีดีดีดีดี

บทความที่เกี่ยวข้อง

Jan 17, 2016, 23:10
15118 views
1 เดือนผ่านไปกับความคืบหน้าคอร์สสอนเขียนแอปแอนดรอยด์บน Udemy
Dec 12, 2015, 14:41
10634 views
โอกาสจากการเขียนบล็อกโปรแกรมมิ่งเป็นภาษาอังกฤษ กรณีศึกษาจากบล็อก The Cheese Factory
0 Comment(s)
Loading