Việc sử dụng quyền truy cập vị trí ở nền sau có thể ảnh hưởng đáng kể đến thời lượng pin. Android hỗ trợ giới hạn 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 hơn. Những hoạt động tối ưu hoá này có lợi cho tất cả thiết bị, bất kể phiên bản Android mà thiết bị đang chạy.
Khi áp dụng Giới hạn quyền truy cập vị trí ở nền sau:
- 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 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 đã quen thuộc với các API sau:
- Dịch vụ vị trí của Google. Các API này cho độ chính xác cao hơn và giảm tải pin hơn so với API vị trí khung.
- Trình cung cấp vị trí kết hợp. API này kết hợp các tín hiệu của GPS, Wi-Fi và mạng di động, cũng như gia tốc kế, con quay hồi chuyển, từ kế và các cảm biến khác.
- Khoanh vùng địa lý, API này được xây dựng dựa trên API Trình cung cấp vị trí kết hợp và được tối ưu hoá để cải thiện hiệu suất pin.
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 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 ít.
Độ chính xác
Bạn có thể chỉ định độ chính xác của vị trí bằng cách sử dụng phương thức setPriority(), truyền một trong các giá trị sau làm đối số:
PRIORITY_HIGH_ACCURACYcung cấp 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_ACCURACYcung cấp dịch vụ 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_POWERchủ 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_PASSIVEnhận vị trí từ các ứng dụng khác một cách bị động. Vị trí đã được tính toán từ trước cho các ứng dụng này.
Sử dụng các lựa chọn nguồn điện cân bằng hoặc nguồn điện thấp để đáp ứng nhu cầu về thông tin vị trí của hầu hết ứng dụng. Đảm bảo độ 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
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
setIntervalMillis()để 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
setMinUpdateIntervalMillis()để chỉ định khoảng thời gian nhận vị trí của các ứng dụng khác.
Chuyển giá trị lớn nhất có thể khi sử dụng setIntervalMillis(). Đ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. Dành khoảng thời gian vài giây cho các trường hợp sử dụng nền trước.
Giới hạn quyền truy cập vị trí ở nền sau được giới thiệu trong Android 8.0 (cấp độ API 26) thực thi các chiến lược này, tuy thế ứng dụng của bạn nên cố gắng thực thi các chiến lược đó trên thiết bị chạy Android 7.0 (cấp độ API 24) trở xuống.
Độ trễ
Bạn có thể chỉ định độ trễ bằng phương thức setMaxUpdateDelayMillis(), 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 setIntervalMillis(). Chế độ cài đặt này trì hoãn việc phân phối thông tin vị trí và nhiều thông báo cập nhật 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 thông báo cập nhật vị trí ngay lập tức, bạn nên truyền giá trị lớn nhất có thể về phương thức setMaxUpdateDelayMillis(), đ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 đưa ra một số hành động cụ thể mà bạn nên thực hiện để 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ể dùng dịch vụ vị trí và cách tối ưu hoá tác động đến thời lượng pin cho các trường hợp đó.