Android 9.0 开机后打开Wifi流程和Wifi状态值的保存

目录

引述

一、开机后打开Wifi开关的流程

二、Wifi开关状态值的保存逻辑

2.1 Settings.Global.WIFI_SAVED_STATE

2.2 Settings.Global.WIFI_ON


引述

       我们在Android系统关开机之后会发现Wifi仍然保持着上一次关机时的状态,而且是进入home界面之后Wifi就会自动打开。我们就会想Wifi开关状态是保存在哪里呢?又是谁去打开Wifi的呢?是Settings应用呢还是在Launcher呢;下面我们就简单分析Wifi开关状态值的保存逻辑和开机后打开Wifi的流程。

我们程序员逻辑一般都是先考虑功能的实现。所以我们先分析开机后打开Wifi的流程,看下是如何去恢复上一次的Wifi状态。

一、开机后打开Wifi开关的流程

WifiService在开机时就会被启动起来,它是在SystemServer在startOtherServices() 方法中启动的;

然后再调用了startBootPhase();

最后来到WifiSerice中的onBootPhase();

接着调用了checkAndStartWifi();

方法中是先执行isWifiToggleEnabled()获取之前的状态,然后根据获取的mPersistWifiState值再判断是否去打开WIFI开关。

我们再跟一下mPersistWifiState这个值的来源。

这里我们就看到了状态值是调用Settings.Global来进行获取保存的。保存的key值是Settings.Global.WIFI_ON。.

这里先总结一下大致流程:

  1. 系统开机后SystemServer启动WifiService。
  2. WifiService执行checkAndStartWifi()来恢复上一次的Wifi开关状态。
  3. 如果获取到的会根据保存的Settings.Global.WIFI_SAVED_STATE和Settings.Global.WIFI_ON两个值来判断是否打开Wifi。

下面我们接下来再看下Settings.Global.WIFI_SAVED_STATE和Settings.Global.WIFI_ON这两个值的赋值流程。

二、Wifi开关状态值的保存逻辑

2.1 Settings.Global.WIFI_SAVED_STATE

这里的注释可以看出这个值用来当切换WiFi热点时保存相应当前Wifi状态。然后在开机后WifiService启动时读取使用它。

2.2 Settings.Global.WIFI_ON

我们直接全局搜索一下上面读取的这个key值Settings.Global.WIFI_ON。就会发现是在WifiSettingsStore这里类里面有调用。

我们再跟一下handleWifiToggled()这个方法,发现WifiServiceImpl里面有调用:

这里就看到了我们每次打开和关闭Wifi就会以Settings.Global.WIFI_ON为key值记录到系统中。下一次开机时启动WifiService再去读取这个值。

同时WakeupController中也有调用;

我们跟着enableWifi()继续走:

最后我们发现是在扫描的监听方法中onResults()中保存的Wifi状态值,到了这里我们就弄清了Wifi开关状态值的保存逻辑。

本篇分析到这里结束了,感谢您抽出宝贵的时间阅读本文,如有错误的地方欢迎提出一起讨论。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值