Google

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

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

project-volta

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

battery-saver

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

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

volta0

Lazy First และ JobScheduler API

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

volta1

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

volta2

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

volta3

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

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

volta4

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

volta6

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

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 ซึ่งนักพัฒนาแอพก็ต้องมาดูรายละเอียดว่าเป็นความตั้งใจหรือความผิดพลาดกันแน่

volta7

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

volta8

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

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

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

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

100dej Sat, 28/06/2014 - 14:06

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

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

tekkasit Sat, 28/06/2014 - 15:33

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

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

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

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

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

osmiumwo1f Sat, 28/06/2014 - 17:25

In reply to by tekkasit

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

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

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

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

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

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

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

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

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

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

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

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

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

LinkWii1GT Sun, 29/06/2014 - 03:48

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