PNO 即Preferred Network Offload,用于系统在休眠的时候连接WiFi

四种场景

亮屏情况:

在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()。

onResume -> WifiSettings.javamWifiTracker.startTracking ->startTracking -> WifiTracker.javaresumeScanning ->mScanner.resume ->resume->sendEmptyMessage(MSG_SCAN); ->handleMessage ->   //Scanner类mWifiManager.startScan -> //调用WiFi Service开始扫描。sendEmptyMessageDelayed(0, WIFI_RESCAN_INTERVAL_MS); //发送下次扫描时间间隔

WIFI_RESCAN_INTERVAL_MS默认定义为10秒。

// Combo scans can take 5-6s to complete - set to 10s.
private static final int WIFI_RESCAN_INTERVAL_MS = 10 * 1000;

WiFi Setting和非Settings界面的扫描是同时不干预并存工作的.
其中35秒和75秒是非WiFi界面的周期扫描,间隔40秒,说明是第二次(20 x 2)扫描了。
其他的是在WiFi Settings界面扫描,每10秒一次。
非WiFi Setting界面

// Start a connectivity scan. The scan method is chosen according to
// the current screen state and WiFi state.
startConnectivityScan ->startPeriodicScan ->  //mScreenOn为truemPeriodicSingleScanInterval = PERIODIC_SCAN_INTERVAL_MS;    //设置扫描间隔为20sstartPeriodicSingleScan ->mPeriodicSingleScanInterval *= 2; //每扫描一次,时间拉长一倍,最大不能超过MAX_PERIODIC_SCAN_INTERVAL_MS即160sstartSingleScan ->mScanner.startScan  //开始扫描

灭屏情况

startConnectivityScan ->startConnectedPnoScan -> //screenOff以及WiFi已经有连接的情况scanSettings.periodInMs = CONNECTED_PNO_SCAN_INTERVAL_MS; //设置扫描周期为160SmScanner.startConnectedPnoScan ->startPnoScanstartDisconnectedPnoScan -> //screenOff以及WiFi没有连接但有保存的情况scanSettings.periodInMs = DISCONNECTED_PNO_SCAN_INTERVAL_MS; //设置扫描周期为20SmScanner.startDisconnectedPnoScan ->startPnoScan

没有保存网络情况

class DisconnectedState extends State {

/*** If we have no networks saved, the supplicant stops doing the periodic scan.* The scans are useful to notify the user of the presence of an open network.* Note that these are not wake up scans.*/
if (mNoNetworksPeriodicScan != 0 && !mP2pConnected.get()&& mWifiConfigManager.getSavedNetworks().size() == 0) {sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,++mPeriodicScanToken, 0), mNoNetworksPeriodicScan);
}

}

mNoNetworksPeriodicScan的值被定义在 frameworks/base/core/res/res/values/config.xml中

<integer translatable="false" name="config_wifi_framework_scan_interval">300000</integer>

可以看到为 5min

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

Android 9 wifi PNO 扫描相关推荐

  1. Android wifi PNO扫描流程(Andriod O)

    版权声明:本文为博主原创文章,博客地址:https://blog.csdn.net/h784707460/article/details/79702275,未经博主允许不得转载. 一. Android ...

  2. Android-O wifi PNO扫描流程

    一. Android O wifi扫描机制 Android O的扫面场景可以归结为以下四种: 1. 亮屏情况下,在Wifi settings界面,固定扫描,时间间隔为10s. 2. 亮屏情况下,非Wi ...

  3. Wi-Fi PNO扫描流程(Android P)

    简介:当手机灭屏情况下,有保存网络时,若已连接,不扫描,否则,PNO扫描,即只扫描已保存的网络.最小间隔min=20s,最大间隔max=20s*3=60s PNO 即Preferred Network ...

  4. (五十四)Android O WiFi 获取扫描结果流程梳理

    前言:之前在(五十) Android O WiFi的扫描流程梳理 已经梳理过扫描流程了,那扫描完的结果会呈现在设置的WiFi界面,那扫描结果是如何获取的呢? 1. wifi扫描结果简介 WiFi的扫描 ...

  5. Android中wifi认证的实现

    WiFi需要登录的情况(WiFi重定向) 检测wifi是否需要portal验证 公共场所wifi验证 关于wifi portal认证–为浏览器添加wifi认证功能 Android中wifi的扫描机制 ...

  6. Wifi模块—源码分析Wifi热点扫描2(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点扫描过程部分的获取扫描结果的过程,也是Wifi扫描过程的延续,可以先看前面Wifi扫描的分析过程. Wifi模块-源码分析Wifi热点扫描(Andr ...

  7. Wifi模块—源码分析Wifi热点扫描(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点查找过程,也是Wifi启动的过程延续,Wifi启动过程中会更新Wifi的状态,框架层也有相应广播发出,应用层接收到广播后开始进行热点的扫描.可以先看 ...

  8. android p wifi一直在扫描_(一百六十八)Android P wifi 扫描失败结果上报流程梳理-扫描上报梳理②...

    接(一百五十五)Android P wifi 扫描失败结果上报流程梳理-扫描上报梳理 扫描失败上报梳理发现梳理的差了很多,特补充 1.WificondScannerImpl @Override pub ...

  9. android p wifi一直在扫描_Android Wifi 扫描及自动连接

    缘起 最近有个需求,要求App能够自动扫描到某个热点然后自动连接上热点.背景是我们公司属于IoT行业,这个热点是设备发出的,有固定的前缀(比如设备热点名为SmartLife-xx),可以直接连接无需密 ...

最新文章

  1. OpenVINO + OpenCV实现车辆检测与道路分割
  2. P6617 查找 Search 线段树 查找区间内是否有两个和为w的数(w不变)
  3. python array按行归一化_机器学习 第40集:特征不归一化有什么危害?特征归一化公式是什么?( 含有笔记、代码、注释 )...
  4. centos nginx重启_nginx学习笔记
  5. caffeine 缓存_使用Caffeine和Spring Boot的多个缓存配置
  6. java 省市区三级联动_AJAX省市区三级联动下拉菜单(java版)
  7. nagios监控服务器的搭建
  8. OpenCV_08 边缘检测:Sobel检测算子+Laplacian算子+Canny边缘检测
  9. codeblock socket 编译错误_在 Go 中使用 Websockets 和 Socket.IO
  10. c语言计算坐标,求助,有关坐标计算的
  11. 【shell系列】之awk简单介绍
  12. Ubuntu14.04安装tomcat-9.0.1的教程
  13. 创建一个WPF+EF应用程序
  14. 破解密码很难?利用Python自动编写暴力破解字典,***必学技能!
  15. 2022-2028年全球与中国硬盘驱动器存储模块行业深度分析
  16. Ms08067实验室 JAVA代码审计实战班:开课喽!!
  17. Java Web目前主流的框架以及正在兴起的框架
  18. STM32野火教程学习
  19. android精选源码,erp交互效果摩天轮高仿斗鱼直播View炫酷进度条源码
  20. 简单教学管理系统画E-R关系图

热门文章

  1. 在SQL中limit 函数的使用
  2. ffmpeg 编码器AVCodecContext 的配置参数
  3. 图形界面 V: 列表视图元件 (第二章)
  4. Access-培训管理系统-03-建个数据库
  5. android手机系统对比,国产手机系统哪家强?几大主流手机系统盘点对比
  6. 13个MySQL送命题!大厂必看
  7. 无人机自由飞行测试台 FFT GYRO 2000
  8. 获取手机指纹库指纹信息
  9. java 保存微信表情_Java微信公众号开发之用户表情存储解决方案
  10. win11怎么看电脑显卡信息