我们在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
上面方法执行的就是刷新页面的文字状态,过程到这里就结束了。