Tags:
Node Thumbnail

ที่งาน Google I/O 2014 เราได้เห็นชื่อ "โครงการ" ที่สามของ Android ถัดจาก Project Butter ที่ช่วยให้ลื่นไหลขึ้น (Android 4.1) และ Project Svelte ที่ช่วยให้กินแรมน้อยลง (Android 4.4)

รอบนี้กูเกิลโชว์ Project Volta ที่บอกว่ามันจะช่วยให้ Android ใช้แบตเตอรี่อย่างมีประสิทธิภาพกว่าเดิม แต่กลับพูดถึงมันบนเวที keynote น้อยมาก รายละเอียดของโครงการนี้ จริงๆ แล้วอยู่ในเซสชันเฉพาะ Introduction to Project Volta ครับ

alt="project-volta"

เท่าที่ผมนั่งนับดู Project Volta ประกอบด้วยโครงการย่อยทั้งหมด 3 ส่วน เริ่มจากอย่างแรกคือฟีเจอร์ Battery Saver ของ Android L ที่คุยว่าจะเพิ่มอายุการใช้งานแบตได้สูงสุด 90 นาทีจากปกติ อันนี้ผมยังหารายละเอียดไม่เจอ แต่รูปแบบน่าจะคล้ายๆ Battery Saving Mode ของ Galaxy S5/HTC M8 คือปิดการใช้งานฟีเจอร์บางอย่างที่ไม่จำเป็นออกไป

alt="battery-saver"

ส่วนโครงการย่อยที่เหลืออีก 2 ส่วนถูกพูดถึงในเซสชัน Project Volta โดยโครงการทั้งสองตัวเน้นไปที่ "แอพ" ไม่ใช่ตัวระบบปฏิบัติการ ซึ่งกูเกิลใช้วิธีออกเครื่องมือช่วยให้นักพัฒนาแอพสามารถเก็บข้อมูลการใช้แบตเตอรี่ได้ดีกว่าเดิม

  1. Lazy First ให้แอพทำงานเท่าที่จำเป็น โดยออก JobScheduler API หรือตัวช่วยเรียกทำงาน (job scheduler) ให้แอพเรียกใช้
  2. Battery Historian เครื่องมือช่วยวิเคราะห์การใช้งานแบตเตอรี่

alt="volta0"

Lazy First และ JobScheduler API

เริ่มจากส่วน Lazy First ก่อนครับ ทีมงานกูเกิลมานั่งวิเคราะห์พฤติกรรมการใช้งานแบตเตอรี่อย่างละเอียด และพบว่าส่วนที่กินแบตเยอะๆ มีด้วยกัน 3 อย่างคือซีพียู เครือข่าย และหน้าจอ

alt="volta1"

ตัวอย่างการทำงานของ Nexus 5 เวลาส่งข้อมูลผ่านเครือข่าย LTE จะเห็นกราฟสีเขียวพุ่งขึ้นในช่วงแรกที่ส่งข้อมูล แต่หลังจากนั้นจะยังติดต่อกับเครือข่ายอีกช่วงหนึ่งแม้ไม่ได้ส่งข้อมูลแล้ว (เส้นสีแดง) ซึ่งตรงนี้กูเกิลมองว่าเปลืองพลังงานโดยใช่เหตุ

alt="volta2"

คำถามของกูเกิลจึงเป็นว่า ถ้าเราสามารถรอได้ (lazy) ไม่จำเป็นต้องรีบส่งข้อมูล ก็ย่อมทำให้ระบบโดยรวมกินพลังงานน้อยลง

alt="volta3"

ปัญหาคือการสั่งงานให้แอพ "รอ" เพื่อทำงานบางอย่างเท่าที่จำเป็นนั้นไม่ใช่เรื่องง่าย นักพัฒนาส่วนใหญ่จึงเขียนโปรแกรมไม่ซับซ้อนมาก สั่งให้ทำอะไรทันทีเลย (ซึ่งเขียนง่าย ตรงไปตรงมา แต่อาจไม่ดีในแง่พลังงาน เช่น เกิดปัญหา wakelock) กูเกิลเลยแก้ปัญหาโดยออกตัวจัดคิวงาน (job scheduler) มาให้ใน Android L

ในแง่การเขียนโปรแกรมก็แค่สร้างคลาส JobInfo มาครอบฟังก์ชันการทำงานปกติไว้อีกที กำหนดเงื่อนไขเวลาที่ต้องการ ที่เหลือ job scheduler จัดให้เอง

alt="volta4"

จากแผนภาพจะเห็นโครงสร้างการทำงานครับ (ถ้าใครเคยเรียนเรื่อง JobScheduler ของระบบปฏิบัติการมา ก็แนวคิดเดียวกัน) คือแอพจะกำหนดช่วงเวลาทำงานให้ JobScheduler รับทราบ จากนั้น JobScheduler (ซึ่งเป็นส่วนหนึ่งของระบบ) จะจัดการ "งาน" (job) ให้เราเอง

alt="volta6"

เงื่อนไขการทำงานของ JobScheduler API ก็มีให้เลือกหลายแบบ เช่น ทำงานเมื่อเชื่อมต่อเครือข่ายเท่านั้น ทำงานเมื่อเสียบสายชาร์จเท่านั้น เป็นต้น

alt="volta5"

JobScheduler API มีให้ลองใช้แล้วใน Android L Preview Release รายละเอียดคร่าวๆ อ่านได้จาก Android L API Overview

Battery Historian

ฟีเจอร์ด้านการวัดอัตราการใช้งานแบตเตอรี่ แยกได้เป็นสองส่วนครับ อย่างแรกคือ batterystats เป็นคำสั่งใหม่ที่เพิ่มเข้ามาใน ADB

วิธีการเรียกใช้ก็สั่ง

$ adb shell dumpsys batterystats --charged <package-name>

เรียกดูได้ละเอียดถึงขนาดแพ็กเกจของแอพเป็นรายตัว และกำหนดเวลาได้ว่าอยากดูจากช่วงไหนถึงช่วงไหน

ตัวอย่างจากภาพด้านล่าง บ่งบอกกรณี B กับ C ว่ามีอัตราการส่งแพ็กเกจจำนวนใกล้เคียงกัน แต่ใช้ระยะเวลาการส่งต่างกันมาก (42 นาทีกับ 2 นาที) ดังนั้นประสิทธิภาพในการใช้พลังงานของ B จึงต่ำกว่า C ซึ่งนักพัฒนาแอพก็ต้องมาดูรายละเอียดว่าเป็นความตั้งใจหรือความผิดพลาดกันแน่

alt="volta7"

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

alt="volta8"

โปรแกรม Battery Historian (historian.par) จะแถมมากับ Android SDK ด้วย แต่สามารถดาวน์โหลดแยกเองได้จาก GitHub (เป็น Python)

ทั้งหมดนี้คือรายละเอียดของ Project Volta ครับ ใครสนใจข้อมูลเพิ่มเติมสามารถดูได้จากวิดีโอด้านล่าง

ในภาพรวมแล้ว Project Volta ค่อนข้างต่างไปจาก Butter/Svelte ที่เน้นการปรับปรุงตัวระบบปฏิบัติการโดยตรง (กูเกิลควบคุมได้หมด) เพราะปัญหาเรื่องแบตเตอรี่เกิดจากแอพมากกว่า (ทั้งแอพกูเกิลเองและแอพของนักพัฒนาภายนอก) ทำให้ Volta เน้นไปที่การสร้างเครื่องมือให้นักพัฒนาแอพสามารถตรวจเช็คปัญหาแบตเตอรี่ได้ง่ายขึ้น เราจึงต้องรอนักพัฒนาทั้งหลายนำเครื่องมือเหล่านี้ไปใช้ปรับปรุงแก้ปัญหาแอพของตัวเองอีกพักใหญ่ๆ จึงจะเห็นผลว่า Project Volta ดีแค่ไหนกันครับ

Get latest news from Blognone

Comments

By: 100dej
AndroidWindows
on 28 June 2014 - 14:06 #717465

Play store ช่วย​บอก​ด้วย​นะ​ว่า​ app​ ไหน​ใช้​ project นี้​ใน​ Code​ บ้าง​ จะ​ได้​เป็น​ทาง​เลือก​เวลา​ลง​ app​

By: itpcc
ContributoriPhoneRed HatUbuntu
on 28 June 2014 - 14:36 #717470
itpcc's picture

แต่สุดท้าบบางแอพ โดยเฉพาะพวกเล่นหุ้นก็คงไม่ได้ใช้ JobScheduler API สักเท่าไหร่หรอกนะ
//นอกเรื่องนิด แมวน่ารัก อยากเข้าไปลูบคางมัน >_<


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: tekkasit
ContributorAndroidWindowsIn Love
on 28 June 2014 - 15:33 #717476
tekkasit's picture

จริงๆ แบบนี้มันก็ต้องขอความกรุณา/ความร่วมมือจากนักพัฒนานะ ซึ่งก็ไม่รู้ว่าจะได้รับความร่วมมือแค่ไหน? เพราะเป็น non-functional requirement นี่

อยากจะได้อะไรที่มันทำได้เองโดยไม่ต้องง้อนักพัฒนา อย่าง Butter มันเกิดที่ระดับตัวแกนระบบเอง

เท่าที่เห็นส่วนใหญ่พวกแอพที่รันอยู่เบื้องหน้า ผู้ใช้จะรู้ตัวเองว่าเพราะตัวเองเล่นเกมอยู่แบตลด ไม่แปลกใจ

แต่ที่ background process/service ที่ส่งข้อมูลเบื้องหลังนี่ทำให้เครื่องติด wakelock เยอะมาก ซึ่งผู้ใช้ไม่รู้สึกตัว รู้อีกทีก็เครื่องอุ่นๆ แบตลดวูบ จริงๆ น่าจะโหดแบบว่า ล็อคเลยว่าพวก background process/service ส่งข้อมูลต่อเน็ตได้เป็นช่วงๆ ห้วงละหนึ่งนาที ห่างกันห้านาทีอะไรแบบนี้ น่าจะทำให้ประหยัดไปได้เยอะมาก

เพราะเห็นคนพยายามทำแนวคิดแบบนี้ด้วย Tasker กันไม่น้อยทีเดียว

By: osmiumwo1f
ContributorWindows PhoneWindows
on 28 June 2014 - 17:25 #717493 Reply to:717476

"แต่ที่ background process/service ที่ส่งข้อมูลเบื้องหลังนี่ทำให้เครื่องติด wakelock เยอะมาก ซึ่งผู้ใช้ไม่รู้สึกตัว รู้อีกทีก็เครื่องอุ่นๆ แบตลดวูบ จริงๆ น่าจะโหดแบบว่า ล็อคเลยว่าพวก background process/service ส่งข้อมูลต่อเน็ตได้เป็นช่วงๆ ห้วงละหนึ่งนาที ห่างกันห้านาทีอะไรแบบนี้ น่าจะทำให้ประหยัดไปได้เยอะมาก"

Windows Phone เคยทำแบบที่ว่าครับ ส่วนสภาพเป็นยังไงก็ดูเอาเองละกันครับ

By: hisoft
ContributorWindows PhoneWindows
on 28 June 2014 - 17:37 #717499 Reply to:717493
hisoft's picture

ปัจจุบันก็ยังทำอยู่ไม่ใช่เหรอครับ :p

By: osmiumwo1f
ContributorWindows PhoneWindows
on 28 June 2014 - 17:43 #717501 Reply to:717499

บังเอิญผมไม่ได้จับ Windows Phone 8 เลยไม่รู้ว่ามันหายไปหรือยังครับ เลยขอใช้คำว่า "เคย" ไปก่อนครับ
ปล. เท่าที่หาข้อมูล กลายเป็นว่ายังอยู่เหมือนเดิม

By: hisoft
ContributorWindows PhoneWindows
on 28 June 2014 - 19:21 #717535 Reply to:717501
hisoft's picture

ผมเข้าใจว่าจริงๆ แล้ว iOS ก็ทำคล้ายๆ แบบนี้ด้วยเหมือนกันรึเปล่าครับ มีแต่ Android ที่รันตลอด

By: osmiumwo1f
ContributorWindows PhoneWindows
on 28 June 2014 - 21:14 #717549 Reply to:717535

เท่าที่หาดู (หลังจากเห็น reply) iOS4 ถึง iOS6 แอพที่ทำงานแบบ background ได้จะต้องเป็น
-แอพที่เล่นเนื้อหาที่เป็นเสียง (แอพเพลงต่างๆ)
-แอพที่บอกตำแหน่งของผู้ใช้บนโลกตลอดเวลา (Map หรือนำทางต่าง)
-แอพที่มี VoIP
-แอพที่ต้องดึงข่าวแล้วประมวลผล (Facebook)
-แอพที่ต้องติดต่อกับอุปกรณ์ภายนอก
นอกนั้นเมื่อกดปุ่ม home แอพจะมีเวลา 10-15 นาทีที่ต้องทำงานให้เสร็จ หลังหมดเวลาแล้วต้อง suspend ครับ
แต่ของ iOS7 ผมยังหารายละเอียดไม่เจอครับ (เพราะตอนเปิดตัว iOS7 จำได้ว่าเปลี่ยนระบบ multitask ใหม่ เลยคิดว่าต้องต่างจาก iOS6 ครับ)

By: hisoft
ContributorWindows PhoneWindows
on 28 June 2014 - 22:18 #717569 Reply to:717549
hisoft's picture

iOS7 จำได้ว่ามีอะไรสักอย่างที่ดูพฤติกรรมการใช้ แล้วพยายามจะเรียกขึ้นมารันเพื่อเตรียมข้อมูลไว้ล่วงหน้านะครับ

ส่วน WP8 จะมีพวกรันเบื้องหลังได้ตลอดเป็นพวก VoIP พวกนำทางเหมือนกันครับ แต่ไม่แน่ใจว่าอะไรขนาดไหน

By: Zatang
ContributoriPhoneAndroid
on 29 June 2014 - 00:03 #717604 Reply to:717569

ใช่อันนี้เปล่าครับ

iOS learns patterns based on your use of the device and tries to predict when an app should be updated in the background. It also learns when the device is typically inactive, such as during the night, to reduce update frequency when the device is not in use.

http://support.apple.com/kb/ht4211


อคติทำให้คนรับเหตุผลด้านเดียว

By: hisoft
ContributorWindows PhoneWindows
on 29 June 2014 - 01:03 #717623 Reply to:717604
hisoft's picture

ใช่ครับ ขอบคุณครับ

By: osmiumwo1f
ContributorWindows PhoneWindows
on 29 June 2014 - 00:28 #717612 Reply to:717569

ผมไม่แน่ใจว่าใน WP8 ยังทำได้หรือเปล่า แต่ใน WP7 ถ้าเครื่องปลดล็อก Interop แล้ว บวกกับเทคนิคพิเศษ จะทำให้แอพทำงานใน background ตลอดได้ครับ
ปล. พึ่งนึกออกว่าทำได้เพราะตอนทำ project จบ ผมทำแอพบันทึกสถิติการออกกำลังกาย ซึ่งมี pedometer (เครื่องนับก้าว) ด้วย ซึ่งมันต้องทำงานตลอดเวลา และผมก็ใช้วิธีที่ว่าให้มันนับก้าวตลอด ส่วนเรื่องการบริโภคพลังงานของแอพ ต้องบอกว่าเหมือนใช้งานตลอดเวลาครับ

By: hisoft
ContributorWindows PhoneWindows
on 29 June 2014 - 01:03 #717621 Reply to:717612
hisoft's picture

WP8 ส่วนมากปลดล็อก Interop กันไม่ได้ด้วยซ้ำครับ ทำกันได้แค่ dev unlock

ส่วนเรื่องนับก้าว Lumia มี SensorCore ครับ ไม่แน่ใจว่าจะผลักดันไปยี่ห้ออื่นด้วยรึเปล่า ใช้ฮาร์ดแวร์เฉพาะคล้ายๆ M7 ทำให้ไม่กินแบตมากนักครับ แต่ถ้าไม่มีฮาร์ดแวร์เฉพาะตอนนี้ก็เหมือนจะทำไม่ได้เลยถ้าไม่เปิดแอพทิ้งไว้แทน

By: tk719
iPhoneBlackberrySymbianIn Love
on 29 June 2014 - 00:29 #717613 Reply to:717569

Background App Refresh ครับ

By: hisoft
ContributorWindows PhoneWindows
on 29 June 2014 - 01:03 #717622 Reply to:717613
hisoft's picture

ขอบคุณครับ

By: astider
AndroidWindows
on 28 June 2014 - 23:00 #717581

ผมชอบชื่อ Lazy First แฮะ ภาพสไลด์ก็เข้าใจคิด
ชื่อมันล้อมาจาก Lady First แหงๆ (ฮา)

By: Eka-X
ContributoriPhoneAndroidIn Love
on 29 June 2014 - 01:34 #717627

Nexus 5 ที่ใช้อยู่ อายุแบตแย่กว่า iPhone 4s ที่ใช้มาหลายปีอีก ชาร์จก็นานกว่า - -'

เปิดดู Google Play Service กินแบตเยอะสุดเลย ขนาดไม่ได้เปิดใช้ Cellular Data เลย เป็นประสบการณ์การใช้ที่แย่จริงๆ

By: LinkWii1GT
iPhoneAndroidWindows
on 29 June 2014 - 03:48 #717637
LinkWii1GT's picture

Android เจอแอพแต่งรูปใน Android อย่าง Camera360 นี่ตัวดีเลย ทำงานเบื้องหลังตลอด กินแบตมากด้วย แปปเดียวแบตหมด ลบทิ้งแทบไม่ทัน เป็นแอพแต่งรูปแท้ๆแต่ดูดข้อมูลผู้ใช้ซะตลอดเวลา(โปรแกรมจีนอีกแล้ว) -_-

By: ninza01
iPhoneAndroidSymbianWindows
on 8 July 2014 - 02:10 #719904 Reply to:717637
ninza01's picture

ถ้ารูทเป็นก้อคงดีสินะ
greenify โลด