Tối ưu hoá mức tiêu thụ năng lượng cho ứng dụng

Tài liệu này mô tả các phương pháp hay nhất để tối ưu hoá mức tiêu thụ điện năng trong ứng dụng chỉ đường trên thiết bị di động mà bạn xây dựng bằng SDK Điều hướng. Đồng thời, bài viết này cũng mô tả những điểm đánh đổi cần cân nhắc khi áp dụng các phương pháp này. Cụ thể, tài liệu này đề cập đến những nội dung sau:

  • Nguồn tiêu thụ điện năng cao, được xếp hạng từ cao nhất đến thấp nhất.
  • Chiến lược tối ưu hoá mức tiêu thụ điện năng, theo thứ tự quan trọng, bắt đầu bằng tốc độ khung hình.
  • Chiến lược dành cho người dùng cuối để hướng dẫn người dùng ứng dụng cách quản lý việc sử dụng thiết bị trong khi di chuyển.

Tại sao nên tối ưu hoá ứng dụng chỉ đường?

Tuỳ vào tình huống, người dùng ứng dụng có thể chạy hướng dẫn chỉ đường trong thời gian dài. Ví dụ: tài xế và nhân viên giao hàng có thể làm việc nhiều giờ, hoàn thành nhiệm vụ ở những khu vực xa lạ. Trong những trường hợp này, họ phụ thuộc rất nhiều vào hướng dẫn từng chặng trong ứng dụng. Điều này dẫn đến một số vấn đề thường gặp:

  • Mức tiêu hao pin và tình trạng sẵn sàng của bộ sạc. Việc sử dụng nhiều tính năng chỉ đường có thể khiến pin thiết bị hao nhanh hơn dự kiến. Mặc dù nhiều người dùng có thể giải quyết vấn đề này bằng cách sạc thiết bị trên xe, nhưng người lái xe hai bánh thì không thể.
  • Thiết bị bị điều tiết do quá nóng. Ngay cả những người dùng sạc thiết bị liên tục cũng có thể gặp vấn đề. Mức tiêu thụ điện năng cao trong thời gian dài có thể khiến thiết bị nóng lên, dẫn đến tình trạng điều tiết nhiệt và làm giảm hiệu suất sau đó.

Ứng dụng chỉ đường từng chặng dựa vào các tính năng tiêu tốn nhiều điện năng như màn hình, GPS và hoạt động giao tiếp vô tuyến với trạm phát sóng. Vì vậy, bạn nên tối ưu hoá mức sử dụng điện năng của ứng dụng di động. Ngoài ra, bạn nên cân nhắc nhu cầu sử dụng điện năng của đối tượng mục tiêu để có thể cân bằng một cách hợp lý giữa hiệu suất và việc tối ưu hoá mức tiêu thụ điện năng.

Điều gì tiêu tốn nhiều điện năng nhất?

Phần này chia các hoạt động trong ứng dụng liên quan đến mức tiêu thụ pin cao thành hai danh mục:

  • Kết xuất màn hình
  • Thông tin cập nhật về vị trí

Kết xuất màn hình

Việc kết xuất màn hình thường gây ra mức tiêu thụ điện năng cao nhất trong các ứng dụng điều hướng trên thiết bị di động. Mỗi lần thiết bị vẽ bản đồ và các phần tử trên giao diện người dùng khác trên màn hình, thiết bị sẽ dựa vào quá trình xử lý của GPU và CPU. Tương tự, khi người dùng bật màn hình đó trong thời gian dài, việc này cũng tiêu tốn nhiều điện năng hơn.

Ở một mức độ nào đó, bạn có thể dự kiến mức tiêu thụ điện năng cao từ những tài xế hoặc người đi xe dựa vào bản đồ hiển thị để đi theo chỉ dẫn, đặc biệt là nếu họ sử dụng ứng dụng liên tục trong nhiều giờ. Trong trường hợp này, ứng dụng cũng thực hiện tốc độ kết xuất cao hơn trên màn hình vì bản đồ sau đó sẽ cập nhật theo thời gian thực. Trong một số trường hợp, màn hình có thể vẽ lại gần như liên tục, đặc biệt là khi người dùng lái xe từ vị trí này sang vị trí khác mà không dừng lại.

Thông tin cập nhật về vị trí

Ngoài việc kết xuất màn hình, hai hoạt động điều hướng khác cũng tiêu tốn pin của thiết bị:

  • Sử dụng trạm phát sóng vô tuyến và GPS
  • Cập nhật và chia sẻ vị trí, chẳng hạn như để cung cấp thời gian đến dự kiến hoặc báo cáo vị trí của một chiếc xe trong đội xe.

Cả hoạt động giao tiếp qua GPS và radio di động đều dựa vào các hoạt động khởi động tiêu tốn nhiều điện năng: GPS phải tìm vệ tinh và radio di động phải kết nối với các tháp và thiết lập kết nối. Vì những lý do này, về cơ bản, các ứng dụng này chạy liên tục trong quá trình điều hướng, mặc dù radio di động vẫn hoạt động trong 20-30 giây để giảm thiểu chi phí khởi động. Hệ điều hành kiểm soát các chế độ cài đặt này, nên bạn không thể dễ dàng định cấu hình trong ứng dụng của mình.

Đối với thông báo cập nhật vị trí, mức sử dụng điện năng sẽ thay đổi dựa trên các yếu tố không thể dự đoán. Ví dụ: khoảng cách giữa thiết bị và trạm gốc di động xác định mức sử dụng pin, vì thiết bị sẽ sử dụng tín hiệu tối thiểu cần thiết để tiếp tục điều hướng nhằm tránh chuyển đổi tháp. Do đó, một thiết bị di chuyển trong khu vực có kết nối kém sẽ sử dụng nhiều năng lượng hơn so với thiết bị ở gần trạm gốc. Ngoài ra, một số ứng dụng có thể chia sẻ thông báo cập nhật vị trí với dịch vụ quản lý đội xe trung tâm, do đó sẽ cần giao tiếp với máy chủ để thực hiện việc này.

Tối ưu hoá mức sử dụng pin của ứng dụng

Thách thức trong việc tối ưu hoá mức sử dụng pin trong các ứng dụng chỉ đường là các ứng dụng này phụ thuộc rất nhiều vào tài nguyên tiêu tốn pin, điều này hạn chế các lựa chọn của bạn trong việc giảm thiểu tác động mà không phải đánh đổi, chẳng hạn như hạn chế sử dụng màn hình. Phần này cung cấp danh sách các phương pháp bạn có thể áp dụng khi tối ưu hoá ứng dụng, theo thứ tự từ tác động nhiều nhất đến ít nhất.

Thay đổi tốc độ khung hình

Màn hình cập nhật nội dung hiển thị theo tần suất được gọi là tốc độ khung hình, thường được đo bằng số khung hình/giây (FPS). Vì quá trình kết xuất màn hình sử dụng đáng kể khả năng xử lý của CPU và GPU, nên bạn có thể giảm tốc độ khung hình để tiết kiệm pin.

Khi bạn giảm tốc độ khung hình, quá trình kết xuất bản đồ và các cử chỉ tương tác (chẳng hạn như di chuyển, thu phóng hoặc xoay) có thể trở nên kém mượt mà hơn. Để cân bằng giữa hiệu suất sử dụng điện năng và trải nghiệm người dùng nhanh nhạy, bạn có thể duy trì tốc độ khung hình cơ sở thấp và tăng tốc độ khung hình một cách linh động trong các hoạt động tương tác của người dùng đang hoạt động.

Trên thiết bị iOS, SDK bản đồ dành cho iOS hiển thị thuộc tính preferredFrameRate trên GMSMapView để kiểm soát tốc độ khung hình. Bảng sau đây trình bày các giá trị GMSFrameRate mà bạn có thể điều chỉnh:

Giá trị Swift Giá trị Objective-C Mô tả
.powerSave kGMSFrameRatePowerSave Sử dụng tốc độ khung hình tối thiểu để tiết kiệm pin.
.conservative kGMSFrameRateConservative Sử dụng tốc độ khung hình trung bình để kết xuất mượt mà hơn và tiết kiệm chu kỳ xử lý.
.maximum kGMSFrameRateMaximum Sử dụng tốc độ khung hình tối đa cho thiết bị (30 khung hình/giây cho thiết bị cấp thấp, 60 khung hình/giây cho thiết bị cao cấp).

Để tham khảo, hãy xem GMSFrameRate trong tài liệu về Navigation SDK cho iOS.

Để đặt trực tiếp tốc độ khung hình ưu tiên, hãy chỉ định một giá trị cho 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;

Điều chỉnh tốc độ khung hình một cách linh động trong khi thực hiện cử chỉ

Tốc độ khung hình thấp hơn có thể khiến các hoạt động tương tác của người dùng (như kéo, thu phóng và xoay) có cảm giác bị giật. Bạn có thể duy trì hoạt động tương tác mượt mà trong khi vẫn tiết kiệm pin bằng cách tạm thời tăng tốc độ khung hình lên mức tối đa trong các cử chỉ của người dùng, sau đó quay lại tốc độ khung hình tiết kiệm pin khi cử chỉ kết thúc.

Để thực hiện việc này, hãy áp dụng giao thức GMSMapViewDelegate và triển khai các phương thức sau:

  1. Trong mapView:willMove:, hãy kiểm tra xem thao tác di chuyển camera có phải do cử chỉ của người dùng bắt đầu hay không. Nếu gesture là true, hãy đặt preferredFrameRate thành tối đa.
  2. Trong mapView:idleAtCameraPosition:, hãy khôi phục preferredFrameRate về chế độ tiết kiệm pin khi camera ở trạng thái rảnh.

Đoạn mã ví dụ sau đây cho thấy cách điều chỉnh linh động tốc độ khung hình trong các cử chỉ của người dùng:

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

Mặc dù không thể kiểm soát cách người dùng cuối đặt độ sáng màn hình thiết bị hoặc thời gian họ bật màn hình, nhưng bạn có thể cung cấp một lựa chọn để hướng dẫn đi theo chỉ dẫn mà không cần bản đồ. Điều này sẽ cho phép người dùng cuối chọn chế độ đó để tiết kiệm pin. Ví dụ: nếu tài xế thường xuyên làm việc trong cùng một khu vực lân cận, thì họ có thể không cần hướng dẫn dựa trên bản đồ thường xuyên. Bạn có thể bật tính năng chỉ đường không có bản đồ bằng cách đặt điểm đến và bắt đầu hướng dẫn trong SDK Điều hướng nhưng không hiển thị bản đồ.

Thêm một dòng mã để ẩn GMSMapView:

mapView.isHidden = true

SDK điều hướng sẽ tiếp tục cập nhật vị trí bám đường, thời gian đến dự kiến và quãng đường còn lại của hành trình, đồng thời ứng dụng của bạn vẫn có thể đăng ký nhận tất cả sự kiện do SDK đưa ra khi tài xế tiếp tục hành trình. Điều này không phù hợp với mọi trường hợp sử dụng và không phải là lời khuyên hữu ích trong trường hợp người lái xe cần xem bản đồ và làm theo hướng dẫn bằng hình ảnh. Ảnh chụp màn hình sau đây minh hoạ phép so sánh song song về việc bật/tắt chế độ xem bản đồ trong khi chỉ đường.

Ứng dụng minh hoạ đang chạy và hiển thị chế độ xem bản đồ.
Hình 1.Ứng dụng minh hoạ SDK Điều hướng iOS cho thấy bản minh hoạ Data Back
Ứng dụng minh hoạ đang chạy mà không có chế độ xem bản đồ.
Hình 2.Ứng dụng minh hoạ đang chạy mà không có chế độ xem bản đồ. Lưu ý rằng thời gian và khoảng cách còn lại, cũng như vị trí được điều chỉnh theo đường vẫn đang cập nhật.

Sử dụng kiểu bản đồ tối

Hãy cân nhắc việc tạo kiểu cho bản đồ để sử dụng giao diện tối nhằm giảm lượng năng lượng cần thiết để kết xuất bản đồ trên màn hình.

Navigation SDK kết xuất bản đồ bằng SDK Bản đồ của Google dành cho iOS, trong đó có các lựa chọn để tạo kiểu cho mọi chế độ xem bản đồ không phải là chế độ xem chỉ đường trong ứng dụng của bạn. Chế độ xem chỉ đường cũng hỗ trợ buộc bật chế độ tối. Điều này có thể không ảnh hưởng đến mọi thiết bị theo cùng một cách do sự khác biệt về loại màn hình, nhưng cho phép tiết kiệm điện năng trong một số trường hợp. Một nghiên cứu gần đây cho thấy lượng điện năng mà chế độ tối tiết kiệm được trên một số màn hình phụ thuộc vào độ sáng ban đầu của màn hình. Ví dụ: chế độ tối tiết kiệm pin hơn trên màn hình được đặt ở độ sáng tối đa so với màn hình có độ sáng đã được điều chỉnh thành 30-50% mức tối đa. Đây là một yếu tố quan trọng cần cân nhắc khi sử dụng chế độ tối cho ứng dụng, vì mức tiết kiệm pin sẽ phụ thuộc vào cách người dùng cuối đặt độ sáng màn hình.

Để tìm hiểu thêm về cách sửa đổi Giao diện người dùng điều hướng, hãy xem phần Sửa đổi giao diện người dùng điều hướng.

Navigation SDK chạy trên iPhone 15 Pro với kiểu bản đồ tối.
Hình 3.Navigation SDK được định cấu hình bằng kiểu bản đồ tối
Định cấu hình GMSMapView bằng mapID đại diện cho kiểu bản đồ dựa trên đám mây được xác định trong dự án của bạn.

Tính năng định kiểu bản đồ dựa trên đám mây yêu cầu mã bản đồ đại diện cho cấu hình bản đồ phía máy chủ đã được tạo trong dự án Google Console của bạn. Để biết thêm thông tin về cách tạo mã bản đồ, hãy xem tài liệu dành cho nhà phát triển về mã bản đồ. Để biết thêm thông tin chi tiết về cách thiết kế và triển khai kiểu bản đồ dựa trên đám mây, hãy xem tài liệu dành cho nhà phát triển về cách tạo và quản lý kiểu bản đồ dựa trên đám mây.

Thay đổi tần suất cập nhật vị trí GPS

Khi xem xét mức sử dụng điện năng từ các thông báo cập nhật vị trí được gửi từ thiết bị, hãy tập trung nhiều hơn vào tần suất cập nhật vị trí thay vì lượng dữ liệu được gửi trong quá trình truyền.

Bạn không thể trực tiếp kiểm soát việc này trong SDK Điều hướng. Lời khuyên tương tự cũng áp dụng cho việc sử dụng các nguồn của vị trí không phải GPS (Mạng di động và Wi-Fi).

Gửi thông tin cho người dùng của bạn

Người dùng ứng dụng của bạn có thể muốn biết cách tối ưu hoá mức tiêu thụ điện năng. Để giúp người dùng giảm mức tiêu thụ điện năng trên ứng dụng, hãy khuyên họ làm như sau:

  • Khoá điện thoại
  • Đặt ứng dụng chỉ đường ở chế độ nền
  • Sử dụng tính năng chỉ đường mà không cần bản đồ (nếu có thể)
  • Giảm độ sáng màn hình bằng cách sử dụng chế độ tối cho màn hình OLED và AMOLED hoặc bằng cách bật độ sáng thích ứng
  • Giữ mát thiết bị
  • Kết nối với Wi-Fi trên xe (nếu có)

Đo lường mức tiêu thụ điện năng

Bạn có thể sử dụng các công cụ chuyên nghiệp để đo lường mức tiêu thụ điện năng, nhưng thường khó hoặc tốn kém để có được các công cụ này. Các ứng dụng và công cụ phân tích IDE như Trình phân tích năng lượng trong Android Studio và ngăn Mức sử dụng pin trong Trình sắp xếp XCode đo lường mức tiêu thụ điện năng, nhưng có thể khó loại bỏ ảnh hưởng của các quy trình trong nền hoặc đặt một đường cơ sở hiệu suất để đo lường. Trong một số trường hợp, các quy định hạn chế của thiết bị có thể ngăn bạn truy cập vào dữ liệu cần thiết.

Bạn có thể sử dụng phần cứng giám sát nguồn điện chuyên dụng và sửa đổi cấu hình kết nối pin. Ngoài ra, bạn cũng có thể sử dụng các sản phẩm và dịch vụ thương mại để thực hiện việc này. Xin lưu ý rằng việc sửa đổi thiết bị theo cách này có thể làm mất hiệu lực bảo hành của thiết bị.