Giới thiệu về thông tin vị trí ở chế độ nền và thời lượng pin

Việc sử dụng thông tin vị trí ở chế độ nền có thể ảnh hưởng đáng kể đến thời lượng pin. Android hỗ trợ các giới hạn đối với việc thu thập thông tin vị trí ở chế độ nền, nhắc nhà phát triển tối ưu hoá ứng dụng để tiết kiệm pin hiệu quả hơn. Những tính năng tối ưu hoá này mang lại lợi ích cho tất cả thiết bị, bất kể thiết bị đang chạy phiên bản Android nào.

Khi bạn sử dụng Giới hạn quyền truy cập thông tin vị trí ở chế độ nền:

  • Tính năng truy cập vị trí ở chế độ nền được điều chỉnh và tính toán, đồng thời chỉ phân phối vài lần một giờ.
  • Các lần quét tìm Wi-Fi sẽ mang tính hạn chế hơn và việc cập nhật vị trí sẽ không được tính toán khi thiết bị vẫn kết nối với cùng một điểm truy cập tĩnh.
  • Phản hồi của tính năng khoanh vùng địa lý thay đổi từ hàng chục giây đến khoảng hai phút. Thay đổi này giúp cải thiện hiệu suất pin – tốt hơn gấp 10 lần trên một số thiết bị.

Kiến thức cần có

Tài liệu này giả định rằng bạn đã làm quen với các API sau:

Tìm hiểu về tiêu hao pin

Việc thu thập thông tin vị trí và tiêu hao pin có liên quan với nhau như sau:

  • Độ chính xác: Độ chính xác của dữ liệu vị trí. Nói chung, độ chính xác càng cao thì mức tiêu hao pin càng cao.
  • Tần suất: Tần suất việc vị trí được tính toán. Vị trí càng thường xuyên được tính toán, pin càng tiêu hao nhiều.
  • Độ trễ: Tốc độ phân phối dữ liệu vị trí. Độ trễ càng thấp, mức tiêu hao pin càng nhiều.

Độ chính xác

Bạn có thể chỉ định độ chính xác vị trí bằng cách sử dụng phương thức setPriority(), chuyển một trong các giá trị sau làm đối số:

  • PRIORITY_HIGH_ACCURACY cung cấp thông tin vị trí chính xác nhất có thể được tính toán bằng cách sử dụng nhiều thông tin đầu vào (nếu cần) (tùy chọn này sẽ bật GPS, Wi-Fi và di động cũng như sử dụng nhiều loại Bộ cảm biến) và có thể khiến tiêu hao pin đáng kể.
  • PRIORITY_BALANCED_POWER_ACCURACY cung cấp thông tin vị trí chính xác đồng thời tối ưu hoá nguồn điện. Rất hiếm khi sử dụng GPS. Thường sử dụng kết hợp thông tin Wi-Fi và di động để tính toán vị trí của thiết bị.
  • PRIORITY_LOW_POWER chủ yếu dựa vào trạm phát sóng di động và tránh đầu vào Wi-Fi và GPS, cung cấp độ chính xác tương đối (cấp thành phố) với mức tiêu hao pin tối thiểu.
  • PRIORITY_NO_POWER nhận vị trí từ các ứng dụng khác một cách thụ động. Vị trí đã được tính toán từ trước cho các ứng dụng này.

Sử dụng nguồn điện cân bằng hoặc chế độ tiết kiệm pin để đáp ứng nhu cầu vị trí của hầu hết ứng dụng. Bạn phải đảm bảo tính chính xác cao cho các ứng dụng chạy ở nền trước và yêu cầu cập nhật vị trí theo thời gian thực (ví dụ: ứng dụng liên kết (mapping)).

Tần suất sao lưu

Bạn có thể chỉ định tần suất vị trí bằng hai phương pháp:

  • Sử dụng phương thức setinterval() để chỉ định khoảng thời gian tính toán vị trí của ứng dụng.
  • Sử dụng phương thức setFastestInterval() để chỉ định khoảng thời gian nhận thông tin vị trí của các ứng dụng khác.

Truyền giá trị lớn nhất có thể khi sử dụng setInterval(). Điều này đặc biệt đúng với tính năng thu thập thông tin vị trí ở chế độ nền, thường là nguyên nhân làm tiêu hao pin. Hãy đặt trước khoảng thời gian vài giây cho các trường hợp sử dụng trên nền trước.

Giới hạn quyền truy cập vị trí ở chế độ nền được giới thiệu trong Android 8.0 (API cấp 26) thực hiện các chiến lược này, tuy thế ứng dụng của bạn nên cố gắng thực hiện các chiến lược đó trên thiết bị chạy Android 7.0 (API cấp 24) trở xuống.

Độ trễ

Bạn có thể chỉ định độ trễ bằng phương thức setMaxWaitTime(), thông thường là chuyển giá trị lớn hơn vài lần so với khoảng thời gian được chỉ định trong phương thức setInterval(). Chế độ cài đặt này trì hoãn việc phân phối thông tin vị trí và nhiều cập nhật về vị trí có thể được phân phối theo lô. Hai thay đổi này giúp giảm thiểu mức tiêu hao pin.

Nếu ứng dụng của bạn không cần cập nhật vị trí ngay lập tức, bạn nên chuyển giá trị lớn nhất có thể về phương thức setMaxWaitTime(), điều này giúp giao dịch độ trễ hiệu quả hơn để cho hiệu suất dữ liệu tốt hơn và tiết kiệm pin hơn.

Khi sử dụng khoanh vùng địa lý, ứng dụng phải chuyển một giá trị lớn vào phương thức setNotificationResponsiveness() để duy trì nguồn điện. Bạn nên sử dụng giá trị từ năm phút trở lên.

Tài liệu đọc thêm

Để biết thêm thông tin, hãy xem các tài liệu sau:

  • Đề xuất: Hướng dẫn này trình bày một số hành động đề xuất cụ thể mà bạn có thể sử dụng để cải thiện mức tác động của ứng dụng đối với thời lượng pin.
  • Trường hợp sử dụng: Hướng dẫn này cung cấp một số trường hợp sử dụng phổ biến mà bạn có thể sử dụng dịch vụ vị trí và cách tối ưu hoá tác động đến thời lượng pin trong những trường hợp đó.