参考文章:
Android wifi扫描机制(Android O): https://blog.csdn.net/h784707460/article/details/79658950
Android wifi PNO扫描流程(Andriod O) :https://blog.csdn.net/h784707460/article/details/79702275
四种场景
亮屏情况:
- 在WiFi Settings界面,无论WiFi是否有连接,固定扫描时间间隔为10s。
- 在非WiFi Settings界面,无论WiFi是否有连接,固定扫描时间间隔以2的倍数慢慢拉大扫描周期,最小为20s,最大为160s.
二进制指数退避扫描, 退避算法:interval*(2^n) .
灭屏情况:
有保存网络 , 已经连接 , 不扫描.
有保存网络 , 没有连接 , PNO 扫描 (只扫描已经保存的网络) , 间隔 min=20s max=160s
其他情况:
当没有保存网络的时候,固定扫描时间间隔为 5min。
亮屏情况
WiFi Setting界面
进入WiFi Setting界面时,会调用对应Activity的onResume()。
1 | onResume -> WifiSettings.java |
WIFI_RESCAN_INTERVAL_MS默认定义为10秒。
1 | // Combo scans can take 5-6s to complete - set to 10s. |
WiFi Setting和非Settings界面的扫描是同时不干预并存工作的.
其中35秒和75秒是非WiFi界面的周期扫描,间隔40秒,说明是第二次(20 x 2)扫描了。
其他的是在WiFi Settings界面扫描,每10秒一次。
非WiFi Setting界面
1 | // Start a connectivity scan. The scan method is chosen according to |
灭屏情况
1 | startConnectivityScan -> |
没有保存网络情况
1 | class DisconnectedState extends State { |
mNoNetworksPeriodicScan的值被定义在 frameworks/base/core/res/res/values/config.xml中
1 | <integer translatable="false" name="config_wifi_framework_scan_interval">300000</integer>1 |
可以看到为 5min