Quá trình quét PNO (tải mạng ưu tiên Wi-Fi) là quá trình quét Wi-Fi tiêu thụ ít năng lượng, diễn ra định kỳ khi thiết bị bị ngắt kết nối với Wi-Fi và màn hình tắt. Quá trình quét PNO được dùng để tìm và kết nối với các mạng đã lưu. Khung hình sẽ lên lịch các lượt quét này bằng lệnh NL80211_CMD_START_SCHED_SCAN
. Để biết thêm thông tin, hãy xem nl80211.h.
Tối ưu hoá mức sử dụng pin bằng thông tin về khả năng di động của thiết bị
Trên các thiết bị chạy Android 9 trở xuống, khi thiết bị bị ngắt kết nối với Wi-Fi và màn hình tắt, PNO sẽ quét theo khoảng thời gian 20 giây cho 3 lần quét đầu tiên, sau đó giảm xuống còn 1 lần quét mỗi 60 giây cho tất cả các lần quét tiếp theo. Quá trình quét PNO sẽ dừng khi tìm thấy một mạng đã lưu hoặc khi màn hình được bật.
Android 10 giới thiệu một phương thức API không bắt buộc có tên là setDeviceMobilityState()
trong WifiManager
. Phương thức này sẽ tăng khoảng thời gian giữa các lần quét PNO dựa trên trạng thái di động của thiết bị để giảm mức tiêu thụ điện năng.
Các trạng thái di động có thể là:
DEVICE_MOBILITY_STATE_UNKNOWN
: Khả năng di chuyển không xác địnhDEVICE_MOBILITY_STATE_HIGH_MVMT
: Đang đi xe đạp hoặc xe cơ giớiDEVICE_MOBILITY_STATE_LOW_MVMT
: Đi bộ hoặc chạyDEVICE_MOBILITY_STATE_STATIONARY
: Không di chuyển
Nếu thiết bị đứng yên, khung Android sẽ tăng khoảng thời gian giữa các lần quét PNO từ 60 giây lên 180 giây để giảm mức tiêu thụ điện. Hoạt động tối ưu hoá này được thực hiện dựa trên giả định rằng thiết bị khó có thể tìm thấy mạng mới trong quá trình quét PNO khi thiết bị không di chuyển.
Nếu thiết bị ở trạng thái di động khác hoặc nếu phương thức này không được gọi, thì thiết bị sẽ sử dụng hành vi quét PNO mặc định.
Triển khai
Để triển khai tính năng tối ưu hoá mức tiêu thụ điện năng này trên thiết bị chạy Android 10 trở lên, hãy lấy thông tin về khả năng di động của thiết bị và gọi phương thức setDeviceMobilityState()
từ một ứng dụng hệ thống tuỳ chỉnh.