WifiStateTracker

来源:互联网 发布:mac笔记本怎么清理垃圾 编辑:程序博客网 时间:2024/06/05 02:54

SystemServer.java,在 SystemServer启动的时候,会生成WifiServiceConnectivityService的实例

try {                    Slog.i(TAG, "Wi-Fi Service");                    if (FeatureConfig.INTEL_FEATURE_ARKHAM) {                        wifi = new ExtendWifiService(context);                    } else {                       <span style="color:#FF0000;"> wifi = new WifiService(context);                    }                    ServiceManager.addService(Context.WIFI_SERVICE, wifi);</span>                } catch (Throwable e) {                    reportWtf("starting Wi-Fi Service", e);                }…………………………………………………………………………try {                    Slog.i(TAG, "Connectivity Service");                    <span style="color:#FF0000;">connectivity = new ConnectivityService(                            context, networkManagement, networkStats, networkPolicy);                    ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);</span>                    networkStats.bindConnectivityManager(connectivity);                    networkPolicy.bindConnectivityManager(connectivity);                    wifiP2p.connectivityServiceReady();                    wifi.checkAndStartWifi();                } catch (Throwable e) {                    reportWtf("starting Connectivity Service", e);                }
ConnectivityService.java中构造函数ConnectivityService中创建DefaultNetworkFactory对象

public ConnectivityService(Context context, INetworkManagementService netManager,            INetworkStatsService statsService, INetworkPolicyManager policyManager,            NetworkFactory netFactory) {        if (DBG) log("ConnectivityService starting up");        HandlerThread handlerThread = new HandlerThread("ConnectivityServiceThread");        handlerThread.start();        mHandler = new InternalHandler(handlerThread.getLooper());        mTrackerHandler = new NetworkStateTrackerHandler(handlerThread.getLooper());        if (netFactory == null) {            <span style="color:#FF0000;">netFactory = new DefaultNetworkFactory(context, mTrackerHandler);</span>        }。。。。。。。。}

DefaultNetworkFactory.java中创建类WifiStateTracker对象

private static class DefaultNetworkFactory implements NetworkFactory {        private final Context mContext;        private final Handler mTrackerHandler;        public DefaultNetworkFactory(Context context, Handler trackerHandler) {            mContext = context;            mTrackerHandler = trackerHandler;        }        @Override        public NetworkStateTracker <span style="color:#FF0000;">createTracker</span>(int targetNetworkType, NetworkConfig config) {            switch (config.radio) {                case TYPE_WIFI:                   <span style="color:#FF0000;"> return new WifiStateTracker(targetNetworkType, config.name);</span>                case TYPE_MOBILE:                    return new MobileDataStateTracker(targetNetworkType, config.name);                case TYPE_DUMMY:                    return new DummyDataStateTracker(targetNetworkType, config.name);                case TYPE_BLUETOOTH:                    return BluetoothTetheringDataTracker.getInstance();                case TYPE_WIMAX:                    return makeWimaxStateTracker(mContext, mTrackerHandler);                case TYPE_ETHERNET:                    return (NetworkStateTracker) mContext.getSystemService(Context.ETHERNET_SERVICE);                default:                    throw new IllegalArgumentException(                            "Trying to create a NetworkStateTracker for an unknown radio type: "                            + config.radio);            }        }    }

ConnectivityService 的构造函数会创建 mWifiStateTracker,WifiStateTracker会创建 WifiMonitor接收来自底层的事件

WifiService WifiMonitor是整个模块的核心。WifiService负责启动关闭 wpa_supplicant、启动关闭 WifiMonitor监视线程和把命令下发给 wpa_supplicant, WifiMonitor则负责从 wpa_supplicant接收事件通知。

0 0
原创粉丝点击