我是靠谱客的博主 忐忑大侠,最近开发中收集的这篇文章主要介绍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开关状态值的保存逻辑。

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

最后

以上就是忐忑大侠为你收集整理的Android 9.0 开机后打开Wifi流程和Wifi状态值的保存的全部内容,希望文章能够帮你解决Android 9.0 开机后打开Wifi流程和Wifi状态值的保存所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部