Android 9.0 开机后打开Wifi流程和Wifi状态值的保存 |
您所在的位置:网站首页 › 安卓wifi关闭后自动打开 › 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。. 这里先总结一下大致流程: 系统开机后SystemServer启动WifiService。WifiService执行checkAndStartWifi()来恢复上一次的Wifi开关状态。如果获取到的会根据保存的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开关状态值的保存逻辑。 本篇分析到这里结束了,感谢您抽出宝贵的时间阅读本文,如有错误的地方欢迎提出一起讨论。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |