WifiStateTracker

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值