เพิ่มประสิทธิภาพการใช้พลังงานสำหรับแอปของคุณ

เอกสารนี้อธิบายแนวทางปฏิบัติแนะนำในการเพิ่มประสิทธิภาพการใช้พลังงานในแอปการนำทางบนอุปกรณ์เคลื่อนที่ที่คุณสร้างโดยใช้ Navigation SDK และยังอธิบายถึงข้อดีข้อเสียที่ควรพิจารณาเมื่อใช้แนวทางปฏิบัติเหล่านี้ด้วย โดยเฉพาะอย่างยิ่ง เอกสารนี้ครอบคลุมหัวข้อต่อไปนี้

  • แหล่งที่มาของการใช้พลังงานสูง โดยจัดอันดับจากสูงสุดไปต่ำสุด
  • กลยุทธ์ในการเพิ่มประสิทธิภาพการใช้พลังงานตามลำดับความสำคัญ โดยเริ่มจากอัตราเฟรม
  • กลยุทธ์สำหรับผู้ใช้ปลายทางในการให้ความรู้แก่ผู้ใช้แอปเกี่ยวกับวิธีจัดการการใช้งานอุปกรณ์ขณะนำทาง

เหตุใดจึงควรเพิ่มประสิทธิภาพแอปการนำทาง

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

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

แอปการนำทางแบบเลี้ยวต่อเลี้ยวต้องอาศัยฟีเจอร์ที่ใช้พลังงานมาก เช่น หน้าจอ, GPS และการสื่อสารทางวิทยุกับเสาสัญญาณมือถือ ดังนั้นแนวทางปฏิบัติแนะนำคือการเพิ่มประสิทธิภาพการใช้พลังงานของแอปบนอุปกรณ์เคลื่อนที่ นอกจากนี้ คุณควรพิจารณาความต้องการด้านการใช้พลังงานของกลุ่มเป้าหมายเพื่อให้สามารถแลกเปลี่ยนระหว่างประสิทธิภาพและการเพิ่มประสิทธิภาพการใช้พลังงานได้อย่างเหมาะสม

สิ่งใดใช้พลังงานมากที่สุด

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

  • การแสดงผลหน้าจอ
  • การอัปเดตตำแหน่ง

การแสดงผลหน้าจอ

การแสดงผลหน้าจอมักทำให้เกิดการใช้พลังงานสูงสุดในแอปการนำทางบนอุปกรณ์เคลื่อนที่ ทุกครั้งที่อุปกรณ์วาดแผนที่และองค์ประกอบ UI อื่นๆ บนหน้าจอ อุปกรณ์จะอาศัยการประมวลผลของ GPU และ CPU ในทำนองเดียวกัน เมื่อผู้ใช้เปิดหน้าจอนั้นทิ้งไว้เป็นเวลานาน ก็จะใช้พลังงานมากขึ้นด้วย

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

การอัปเดตตำแหน่ง

นอกจากการแสดงผลหน้าจอแล้ว กิจกรรมการนำทางอีก 2 อย่างที่ใช้พลังงานของอุปกรณ์ ได้แก่

  • การใช้งานเสาสัญญาณมือถือและ GPS
  • การอัปเดตตำแหน่งและการแชร์ตำแหน่ง เช่น เพื่อระบุเวลาถึงโดยประมาณหรือรายงานตำแหน่งของยานพาหนะในกลุ่มยานพาหนะ

การสื่อสารทั้งทาง GPS และสัญญาณโทรศัพท์มือถือต้องอาศัยการทำงานเมื่อเริ่มต้นระบบที่ใช้พลังงานมาก โดย GPS ต้องค้นหาดาวเทียม และสัญญาณโทรศัพท์มือถือต้องเจรจากับเสาสัญญาณและสร้างการเชื่อมต่อ ด้วยเหตุผลเหล่านี้ โดยพื้นฐานแล้วแอปจะทำงานอย่างต่อเนื่องในระหว่างการนำทาง แม้ว่าสัญญาณโทรศัพท์มือถือจะยังคงทำงานอยู่เป็นเวลา 20-30 วินาทีเพื่อพยายามลดต้นทุนในการเริ่มต้นระบบ ระบบปฏิบัติการจะควบคุมการตั้งค่าเหล่านี้ซึ่งคุณไม่สามารถกำหนดค่าในแอปได้โดยง่าย

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

เพิ่มประสิทธิภาพการใช้พลังงานของแอป

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

เปลี่ยนอัตราเฟรม

หน้าจอจะอัปเดตสิ่งที่แสดงด้วยความถี่ที่เรียกว่าอัตราเฟรม ซึ่งมักวัดเป็นเฟรมต่อวินาที (FPS) เนื่องจากการแสดงผลหน้าจอใช้การประมวลผล CPU และ GPU อย่างมาก คุณจึงลดอัตราเฟรมเพื่อประหยัดพลังงานได้

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

ในอุปกรณ์ iOS นั้น Maps SDK สำหรับ iOS จะแสดงพร็อพเพอร์ตี้ preferredFrameRate ใน GMSMapView เพื่อควบคุมอัตราเฟรม ตารางต่อไปนี้แสดงค่า GMSFrameRate ที่คุณปรับได้

มูลค่าที่รวดเร็ว ค่า Objective-C คำอธิบาย
.powerSave kGMSFrameRatePowerSave ใช้อัตราเฟรมขั้นต่ำเพื่อประหยัดการใช้งานแบตเตอรี่
.conservative kGMSFrameRateConservative ใช้อัตราเฟรมเฉลี่ยเพื่อให้การแสดงผลราบรื่นขึ้นและประหยัดรอบการประมวลผล
.maximum kGMSFrameRateMaximum ใช้อัตราเฟรมสูงสุดสำหรับอุปกรณ์ (30 FPS สำหรับอุปกรณ์ระดับล่าง และ 60 FPS สำหรับอุปกรณ์ระดับไฮเอนด์)

โปรดดูข้อมูลอ้างอิงที่ GMSFrameRate ในเอกสารประกอบของ Navigation SDK สำหรับ iOS

หากต้องการตั้งค่าอัตราเฟรมที่ต้องการโดยตรง ให้กำหนดค่าให้กับ mapView.preferredFrameRate ดังนี้

Swift

// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = .powerSave

Objective-C

// Reduce the frame rate to conserve battery:
mapView.preferredFrameRate = kGMSFrameRatePowerSave;

ปรับอัตราเฟรมแบบไดนามิกระหว่างการใช้ท่าทางสัมผัส

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

โดยใช้โปรโตคอล GMSMapViewDelegate และใช้เมธอดต่อไปนี้

  1. ใน mapView:willMove: ให้ตรวจสอบว่าการเคลื่อนไหวของกล้องเริ่มต้นโดยท่าทางผู้ใช้หรือไม่ หาก gesture เป็น true ให้ตั้งค่า preferredFrameRate เป็นค่าสูงสุด
  2. ใน mapView:idleAtCameraPosition: ให้คืนค่า preferredFrameRate เป็นโหมดประหยัดพลังงานเมื่อกล้องไม่มีการใช้งาน

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีปรับอัตราเฟรมแบบไดนามิกในระหว่างท่าทางผู้ใช้

Swift

class YourViewController: UIViewController {

  @IBOutlet weak var mapView: GMSMapView!

  override func viewDidLoad() {
    super.viewDidLoad()
    mapView.delegate = self

    // Set a baseline low frame rate to conserve power:
    mapView.preferredFrameRate = .powerSave
  }
}

// MARK: - GMSMapViewDelegate
extension YourViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
    // Increase frame rate during user gestures for smooth interaction:
    if gesture {
      mapView.preferredFrameRate = .maximum
    }
  }

  func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
    // Restore the power-saving frame rate when gestures finish:
    mapView.preferredFrameRate = .powerSave
  }
}

Objective-C

@interface YourViewController : UIViewController <GMSMapViewDelegate>
@end

@implementation YourViewController {
  GMSMapView *_mapView;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  _mapView.delegate = self;

  // Set a baseline low frame rate to conserve power:
  _mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}

#pragma mark - GMSMapViewDelegate

- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
  // Increase frame rate during user gestures for smooth interaction:
  if (gesture) {
    mapView.preferredFrameRate = kGMSFrameRateMaximum;
  }
}

- (void)mapView:(GMSMapView *)mapView
    idleAtCameraPosition:(GMSCameraPosition *)position {
  // Restore the power-saving frame rate when gestures finish:
  mapView.preferredFrameRate = kGMSFrameRatePowerSave;
}

@end

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

เพิ่มบรรทัดโค้ดเพื่อซ่อน GMSMapView ดังนี้

mapView.isHidden = true

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

แอปสาธิตที่ทำงานโดยแสดงมุมมองแผนที่
รูปที่ 1แอปเดโมของ Navigation SDK สำหรับ iOS แสดงเดโมการส่งข้อมูลกลับ
แอปเดโมทำงานโดยไม่มีมุมมองแผนที่ที่มองเห็นได้
รูปที่ 2 แอปสาธิตที่ทำงานโดยไม่แสดงมุมมองแผนที่ โปรดทราบว่าเวลาและระยะทางที่เหลือ รวมถึงตำแหน่งที่ปรับให้ตรงกับถนนยังคงอัปเดตอยู่

ใช้รูปแบบแผนที่สีเข้ม

ลองจัดสไตล์แผนที่ให้ใช้ธีมมืดเพื่อลดปริมาณพลังงานที่ต้องใช้ในการแสดงผลแผนที่บนหน้าจอ

Navigation SDK แสดงผลแผนที่โดยใช้ Google Maps SDK สำหรับ iOS ซึ่งมีตัวเลือกสำหรับการจัดสไตล์มุมมองแผนที่ที่ไม่ใช่การนำทางในแอป มุมมองการนำทางยังรองรับการบังคับใช้โหมดมืดด้วย การดำเนินการนี้อาจไม่ส่งผลต่ออุปกรณ์ทุกเครื่องในลักษณะเดียวกันเนื่องจากประเภทหน้าจอที่แตกต่างกัน แต่ช่วยให้ประหยัดพลังงานได้ในบางกรณี การศึกษาล่าสุดพบว่าปริมาณพลังงานที่โหมดมืดประหยัดได้ในบางหน้าจอขึ้นอยู่กับความสว่างของหน้าจอเมื่อเริ่มต้นใช้งาน ตัวอย่างเช่น โหมดมืดจะประหยัดพลังงานได้มากกว่าในหน้าจอที่ตั้งค่าความสว่างเต็มที่เมื่อเทียบกับหน้าจอที่ปรับความสว่างไว้ที่ 30-50% ของความสว่างสูงสุดอยู่แล้ว ซึ่งเป็นสิ่งสำคัญที่ต้องพิจารณาเมื่อใช้โหมดมืดสำหรับแอป เนื่องจากปริมาณการประหยัดพลังงานจะสัมพันธ์กับวิธีที่ผู้ใช้ปลายทางตั้งค่าความสว่างของหน้าจอ

ดูข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไข UI การนำทางได้ที่แก้ไข UI การนำทาง

Navigation SDK ที่ทำงานบน iPhone 15 Pro ที่มีรูปแบบแผนที่มืด
รูปที่ 3Navigation SDK ที่กำหนดค่าด้วยรูปแบบแผนที่มืด
กำหนดค่า GMSMapView ด้วย mapID ที่แสดงถึงรูปแบบแผนที่ในระบบคลาวด์ที่กำหนดไว้ในโปรเจ็กต์

การจัดรูปแบบแผนที่ในระบบคลาวด์ต้องใช้รหัสแผนที่ซึ่งแสดงถึงการกำหนดค่าแผนที่ฝั่งเซิร์ฟเวอร์ที่สร้างขึ้นในโปรเจ็กต์ Google Console ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างรหัสแผนที่ได้ที่เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์เกี่ยวกับรหัสแผนที่ ดูรายละเอียดเพิ่มเติมเกี่ยวกับการออกแบบและการติดตั้งใช้งานรูปแบบแผนที่ในระบบคลาวด์ได้ในเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ในหัวข้อการสร้างและการจัดการรูปแบบแผนที่ในระบบคลาวด์

เปลี่ยนความถี่ในการอัปเดตตำแหน่ง GPS

เมื่อพิจารณาการใช้พลังงานจากการอัปเดตตำแหน่งที่ส่งจากอุปกรณ์ ให้มุ่งเน้นที่ความถี่ของการอัปเดตตำแหน่งมากกว่าปริมาณข้อมูลที่ส่งในการส่งข้อมูล

ซึ่งไม่ใช่สิ่งที่คุณควบคุมได้โดยตรงใน Navigation SDK คำแนะนำเดียวกันนี้ใช้กับการใช้แหล่งที่มาของตำแหน่งที่ไม่ใช่ GPS (เครือข่ายมือถือและ Wi-Fi)

แชร์ข้อมูลดีๆ กับผู้ใช้

ผู้ใช้แอปของคุณอาจต้องการทราบวิธีเพิ่มประสิทธิภาพการใช้พลังงาน หากต้องการช่วยลดการใช้พลังงานในแอป โปรดแนะนำให้ผู้ใช้ดำเนินการดังนี้

  • ล็อกโทรศัพท์
  • วางแอปการนำทางไว้ในเบื้องหลัง
  • ใช้การนำทางโดยไม่มีแผนที่ หากเป็นไปได้
  • ลดความสว่างของหน้าจอ โดยใช้โหมดมืดสำหรับหน้าจอ OLED และ AMOLED หรือเปิดใช้การปรับความสว่างอัตโนมัติ
  • รักษาอุปกรณ์ให้เย็นอยู่เสมอ
  • เชื่อมต่อ Wi-Fi ในรถยนต์ หากมี

วัดการใช้พลังงาน

คุณสามารถใช้เครื่องมือระดับมืออาชีพเพื่อวัดการใช้พลังงานได้ แต่เครื่องมือเหล่านี้มักจะหาได้ยากหรือมีราคาแพง แอปและเครื่องมือสร้างโปรไฟล์ IDE เช่น Power Profiler ใน Android Studio และแผงการใช้งานแบตเตอรี่ใน XCode Organizer จะวัดการใช้พลังงาน แต่การนำผลกระทบของกระบวนการเบื้องหลังออกหรือตั้งค่าเกณฑ์พื้นฐานด้านประสิทธิภาพเพื่อวัดผลอาจทำได้ยาก ในบางกรณี ข้อจำกัดของอุปกรณ์อาจทำให้เข้าถึงข้อมูลที่จำเป็นไม่ได้

คุณสามารถใช้ฮาร์ดแวร์ตรวจสอบพลังงานเพื่อวัตถุประสงค์พิเศษและแก้ไขการกำหนดค่าการเชื่อมต่อแบตเตอรี่ได้ โดยมีผลิตภัณฑ์และบริการเชิงพาณิชย์ที่ช่วยคุณดำเนินการนี้ได้ โปรดทราบว่าการแก้ไขอุปกรณ์ด้วยวิธีนี้อาจทำให้การรับประกันของอุปกรณ์เป็นโมฆะ