Android p 刷新wifi列表流程

Android p 刷新wifi列表流程

1.WifiTracker.java:: 在广播接收器中接收到WifiManager.WIFI_STATE_CHANGED_ACTION,WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION,WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,WifiManager.RSSI_CHANGED_ACTION这几种广播均会调用fetchScansAndConfigsAndUpdateAccessPoints ->updateAccessPoints(这里会将scanresult转换为accesspoint并进行排序)->conditionallyNotifyListeners->mListener.onAccessPointsChanged(WifiListenerExecutor::onAccessPointsChanged:: runAndLog(mDelegatee::onAccessPointsChanged,mDelegatee就是WifiListener,WifiListener::onAccessPointsChanged)

2.WifiSettings:: WifiSettings实现了WifiTracker.WifiListener,因此调用的是onAccessPointsChanged->updateAccessPointsDelayed->view.postDelayed(mUpdateAccessPointsRunnable, 300 /* delay milliseconds */)->updateAccessPointPreferences->final List accessPoints = mWifiTracker.getAccessPoints(返回return new ArrayList<>(mInternalAccessPoints),private final List mInternalAccessPoints = new ArrayList<>(),因此每刷新一次wifi列表,即调用一次updateAccessPointPreferences都会new accesspoint,都会走accesspoint构造函数)

3.AccessPoint:: public AccessPoint(Context context, Bundle savedState)->update(mConfig, mInfo, mNetworkInfo)->mAccessPointListener.onAccessPointChanged(this)

4.WifiSettings:: wifisettings实现了AccessPointListener接口,因此调用的是onAccessPointChanged->((AccessPointPreference) tag).refresh()

5.AccessPointPreference:: refresh(Updates the title and summary icon; may indirectly call notifyChanged()),刷新图标调用了updateIcon->mIconInjector.getIcon(level),比如wifi信号强度

发布了8 篇原创文章 · 获赞 1 · 访问量 143

猜你喜欢

转载自blog.csdn.net/qq_33707295/article/details/103879715