我们在WiFiSettings界面连接WiFi的时候会看到WiFi Preference的summary状态会从正在连接切换到获取ip再切换到已连接的状态这一篇就分析状态更新过程

一、 WifiTracker.java

我们知道WifiSettings是监听了WifiTracker onAccessPointsChanged()来刷新状态的。我们先分析下哪里调用了onAccessPointsChanged()

再看下哪里调用了conditionallyNotifyListeners()。

1.1 updateAccessPoints ()

看下哪边会调用

这里总结一下:下面几个条件会刷新页面状态:

wifiSettings onStart回调需要更新界面的时候

广播接收到WifiManager.SCAN_RESULTS_AVAILABLE_ACTION

广播接收到WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION

广播接收到WifiManager.LINK_CONFIGURATION_CHANGED_ACTION

广播接收到WifiManager.NETWORK_STATE_CHANGED_ACTION(连接过程中的网络变化就是接收这个广播)

1.2 updateNetworkInfo ()

看下哪里调用了

这里总结一下:

当接收到下面两条广播会刷新页面状态。

WifiManager.NETWORK_STATE_CHANGED_ACTION

WifiManager.RSSI_CHANGED_ACTION

1.3 clearAccessPointsAndConditionallyUpdate()

这个方法是 WiFi关闭的时候会调用。

二、WifiSettings.java

这个方法的注释说命令列表已更新,需要调用getAccessPoints来获取最新信息。我们就从这个方法开始向上和向下分析刷新的流程。

这个方法最后会调用preference.refresh()刷新状态。我们进入AccessPointPreference中去看下refresh()

三、AccessPointPreference.java

从这边可以看到summary是从accessPoint中获取的。forSavedNetworks是表示是否是已保存网络界面,这里调用的是AccessPoint的getSettingsSummary

上面方法执行的就是刷新页面的文字状态,过程到这里就结束了。


版权声明:本文为zx54633089原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zx54633089/article/details/111401666