android 4.0 WIFI 初始化过程(应用层+框架层)
2013-04-28 19:12
441 查看
android 4.0 wifi初始化(应用层 + 框架层)
1、在android/frameworks/base/services/java/com/android/server/目录下
SystemServer.java 中
class ServerThread extends Thread {
。。。。。。。。。。。。。。。。。。。。。。。
@Override
public void run() {
。。。。。。。。。。。。。。。。。。。。
ConnectivityService connectivity = null;
WifiP2pService wifiP2p = null;
WifiService wifi = null;
。。。。。。。。。。。。。。。。。。
try { //实例化WifiP2pService
Slog.i(TAG, "Wi-Fi P2pService");
wifiP2p = new WifiP2pService(context);
ServiceManager.addService(Context.WIFI_P2P_SERVICE, wifiP2p);
} catch (Throwable e) {
reportWtf("starting Wi-Fi P2pService", e);
}
try { //实例化WifiService
Slog.i(TAG, "Wi-Fi Service");
wifi = new WifiService(context);
ServiceManager.addService(Context.WIFI_SERVICE, wifi);
} catch (Throwable e) {
reportWtf("starting Wi-Fi Service", e);
}
try { //实例化ConnectivityService
Slog.i(TAG, "Connectivity Service");
connectivity = new ConnectivityService(
context, networkManagement, networkStats, networkPolicy);
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
networkStats.bindConnectivityManager(connectivity);
networkPolicy.bindConnectivityManager(connectivity);
wifi.checkAndStartWifi();
wifiP2p.connectivityServiceReady();
connectivity.startCne();
} catch (Throwable e) {
reportWtf("starting Connectivity Service", e);
}
。。。。。。。。。。。。。。。。。
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
在ServerThread.run()中实例化WifiP2pService、WifiService、ConnectivityService,并将三个服务均添加到ServiceManager中。在实例化ConnectivityService中,检测和启动wifi。
注释:对象实例化的同时就会分配存储空间,然后对成员变量进行初始化赋值,再执行构造函数。这个过程就是对象初始化。调用构造函数只是初始化的一部分。
有关于addService():
./base/core/java/android/os/ServiceManager.java
在android/frameworks/base/core/java/android/os/ServiceManager.java中:
public final class ServiceManager {
。。。。。。。。。。。。。
/**
* Place a new @a service called @a name into the service
* manager.
*
* @param name the name of the new service
* @param service the service object
*/
public static void addService(String name, IBinder service) {
try {
getIServiceManager().addService(name, service, false);
} catch (RemoteException e) {
Log.e(TAG, "error in addService", e);
}
}
。。。。。。。。。。。。。。。。。
}
由上可知:
ServiceManager.addService(Context.WIFI_SERVICE, wifi):
将名字为“Context.WIFI_SERVICE”的wifi 服务添加到service manager中。
2、frameworks/base/services/java/com/android/server/ConnectivityService.java
在ConnectivityService 的构造函数会创建WifiStateTracker,
public class ConnectivityService extends IConnectivityManager.Stub {
.........................
public ConnectivityService(Context context, INetworkManagementService netd,
INetworkStatsService statsService, INetworkPolicyManager policyManager)
{
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/*
* Create the network state trackers for Wi-Fi and mobile
* data. Maybe this could be done with a factory class,
* but it's not clear that it's worth it, given that
* the number of different network types is not going
* to change very often.
*/
//创建WifiStateTracker
for (int netType : mPriorityList) {
switch (mNetConfigs[netType].radio) {
case ConnectivityManager.TYPE_WIFI:
mNetTrackers[netType] = new WifiStateTracker(netType,
mNetConfigs[netType].name);
mNetTrackers[netType].startMonitoring(context, mHandler);
break;
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
.........................
}
3、android/frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java
在WifiStateTracker中实例化WifiManager和WifiReceiver。
/**
* Track the state of wifi for connectivity service.
*
* @hide
*/
public class WifiStateTracker implements NetworkStateTracker {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/**
* Begin monitoring wifi connectivity
*/
public void startMonitoring(Context context, Handler target) {
mCsHandler = target;
mContext = context;
mWifiManager=(WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
mWifiStateReceiver = new WifiStateReceiver();
mContext.registerReceiver(mWifiStateReceiver, filter);
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
4、在WifiService中实例化WifiStateMachine,在WifiStateMachine中实例化WifiMonitor。
在android/frameworks/base/services/java/com/android/server中
WifiService.java:
/**
* WifiService handles remote WiFi operation requests by implementing
* the IWifiManager interface.
*/
//TODO: Clean up multiple locks and implement WifiService
// as a SM to track soft AP/client/adhoc bring up based
// on device idle state, airplane mode and boot.
public class WifiService extends IWifiManager.Stub {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
WifiService(Context context) {
。。。。。。。。。。。。。。。。。。。。。。。。。
mWifiStateMachine = new WifiStateMachine(mContext, mInterfaceName);
mWifiStateMachine.enableRssiPolling(true);
。。。。。。。。。。。。。。。。。。。。。。。。。
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
在WifiStateMachine中实例化WifiMonoitor,
/**
* Track the state of Wifi connectivity. All event handling is done here,
* and all changes in connectivity state are initiated here.
*
* Wi-Fi now supports three modes of operation: Client, Soft Ap and Direct
* In the current implementation, we do not support any concurrency and thus only
* one of Client, Soft Ap or Direct operation is supported at any time.
*
* The WifiStateMachine supports Soft Ap and Client operations while WifiP2pService
* handles Direct. WifiP2pService and WifiStateMachine co-ordinate to ensure only
* one exists at a certain time.
*
* @hide
*/
public class WifiStateMachine extends StateMachine {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
private WifiMonitor mWifiMonitor;
mWifiMonitor = new WifiMonitor(this, mWifiNative);
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
WifiStateMachine 会创建WifiMonitor 接收来自底层的事件,WifiService 和WifiMonitor 是整个模块的核心。WifiService 负责启动关闭wpa_supplicant、启动关闭WifiMonitor 监视线程和把命令下发给wpa_supplicant,而WifiMonitor 则负责从wpa_supplicant 接收事件通知。
1、在android/frameworks/base/services/java/com/android/server/目录下
SystemServer.java 中
class ServerThread extends Thread {
。。。。。。。。。。。。。。。。。。。。。。。
@Override
public void run() {
。。。。。。。。。。。。。。。。。。。。
ConnectivityService connectivity = null;
WifiP2pService wifiP2p = null;
WifiService wifi = null;
。。。。。。。。。。。。。。。。。。
try { //实例化WifiP2pService
Slog.i(TAG, "Wi-Fi P2pService");
wifiP2p = new WifiP2pService(context);
ServiceManager.addService(Context.WIFI_P2P_SERVICE, wifiP2p);
} catch (Throwable e) {
reportWtf("starting Wi-Fi P2pService", e);
}
try { //实例化WifiService
Slog.i(TAG, "Wi-Fi Service");
wifi = new WifiService(context);
ServiceManager.addService(Context.WIFI_SERVICE, wifi);
} catch (Throwable e) {
reportWtf("starting Wi-Fi Service", e);
}
try { //实例化ConnectivityService
Slog.i(TAG, "Connectivity Service");
connectivity = new ConnectivityService(
context, networkManagement, networkStats, networkPolicy);
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
networkStats.bindConnectivityManager(connectivity);
networkPolicy.bindConnectivityManager(connectivity);
wifi.checkAndStartWifi();
wifiP2p.connectivityServiceReady();
connectivity.startCne();
} catch (Throwable e) {
reportWtf("starting Connectivity Service", e);
}
。。。。。。。。。。。。。。。。。
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
在ServerThread.run()中实例化WifiP2pService、WifiService、ConnectivityService,并将三个服务均添加到ServiceManager中。在实例化ConnectivityService中,检测和启动wifi。
注释:对象实例化的同时就会分配存储空间,然后对成员变量进行初始化赋值,再执行构造函数。这个过程就是对象初始化。调用构造函数只是初始化的一部分。
有关于addService():
./base/core/java/android/os/ServiceManager.java
在android/frameworks/base/core/java/android/os/ServiceManager.java中:
public final class ServiceManager {
。。。。。。。。。。。。。
/**
* Place a new @a service called @a name into the service
* manager.
*
* @param name the name of the new service
* @param service the service object
*/
public static void addService(String name, IBinder service) {
try {
getIServiceManager().addService(name, service, false);
} catch (RemoteException e) {
Log.e(TAG, "error in addService", e);
}
}
。。。。。。。。。。。。。。。。。
}
由上可知:
ServiceManager.addService(Context.WIFI_SERVICE, wifi):
将名字为“Context.WIFI_SERVICE”的wifi 服务添加到service manager中。
2、frameworks/base/services/java/com/android/server/ConnectivityService.java
在ConnectivityService 的构造函数会创建WifiStateTracker,
public class ConnectivityService extends IConnectivityManager.Stub {
.........................
public ConnectivityService(Context context, INetworkManagementService netd,
INetworkStatsService statsService, INetworkPolicyManager policyManager)
{
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/*
* Create the network state trackers for Wi-Fi and mobile
* data. Maybe this could be done with a factory class,
* but it's not clear that it's worth it, given that
* the number of different network types is not going
* to change very often.
*/
//创建WifiStateTracker
for (int netType : mPriorityList) {
switch (mNetConfigs[netType].radio) {
case ConnectivityManager.TYPE_WIFI:
mNetTrackers[netType] = new WifiStateTracker(netType,
mNetConfigs[netType].name);
mNetTrackers[netType].startMonitoring(context, mHandler);
break;
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
.........................
}
3、android/frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java
在WifiStateTracker中实例化WifiManager和WifiReceiver。
/**
* Track the state of wifi for connectivity service.
*
* @hide
*/
public class WifiStateTracker implements NetworkStateTracker {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/**
* Begin monitoring wifi connectivity
*/
public void startMonitoring(Context context, Handler target) {
mCsHandler = target;
mContext = context;
mWifiManager=(WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
mWifiStateReceiver = new WifiStateReceiver();
mContext.registerReceiver(mWifiStateReceiver, filter);
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
4、在WifiService中实例化WifiStateMachine,在WifiStateMachine中实例化WifiMonitor。
在android/frameworks/base/services/java/com/android/server中
WifiService.java:
/**
* WifiService handles remote WiFi operation requests by implementing
* the IWifiManager interface.
*/
//TODO: Clean up multiple locks and implement WifiService
// as a SM to track soft AP/client/adhoc bring up based
// on device idle state, airplane mode and boot.
public class WifiService extends IWifiManager.Stub {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
WifiService(Context context) {
。。。。。。。。。。。。。。。。。。。。。。。。。
mWifiStateMachine = new WifiStateMachine(mContext, mInterfaceName);
mWifiStateMachine.enableRssiPolling(true);
。。。。。。。。。。。。。。。。。。。。。。。。。
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
在WifiStateMachine中实例化WifiMonoitor,
/**
* Track the state of Wifi connectivity. All event handling is done here,
* and all changes in connectivity state are initiated here.
*
* Wi-Fi now supports three modes of operation: Client, Soft Ap and Direct
* In the current implementation, we do not support any concurrency and thus only
* one of Client, Soft Ap or Direct operation is supported at any time.
*
* The WifiStateMachine supports Soft Ap and Client operations while WifiP2pService
* handles Direct. WifiP2pService and WifiStateMachine co-ordinate to ensure only
* one exists at a certain time.
*
* @hide
*/
public class WifiStateMachine extends StateMachine {
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
private WifiMonitor mWifiMonitor;
mWifiMonitor = new WifiMonitor(this, mWifiNative);
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
WifiStateMachine 会创建WifiMonitor 接收来自底层的事件,WifiService 和WifiMonitor 是整个模块的核心。WifiService 负责启动关闭wpa_supplicant、启动关闭WifiMonitor 监视线程和把命令下发给wpa_supplicant,而WifiMonitor 则负责从wpa_supplicant 接收事件通知。
相关文章推荐
- android 4.0 WIFI工作过程(应用层)
- Android 8 Wifi 初始化过程
- Android 中WiFi初始化过程分析
- Android应用框架之应用启动过程
- Android 4.0 WIFI初始化与启动流程
- 在Android开发过程中搭建一个自己的应用框架有几个步骤?需要注意什么?
- .net 4.0应用体系框架的构造过程
- Android 4.0 WIFI初始化与启动流程
- Android 4.0 WIFI初始化与启动流程
- Android应用框架之应用启动过程详解
- Android 4.0 WIFI初始化与启动流程
- Android 4.0 WIFI初始化与启动流程
- Android 4.0 WIFI初始化与启动流程
- Android 4.0 WIFI初始化与启动流程
- Android 4.0 WIFI初始化与启动流程
- Android 4.0 WIFI初始化与启动流程
- android内核字符驱动设备实战之----------运行时库层jni动态库编程(应该是应用框架层)
- Android 应用安装过程
- android volley 框架图片请求后有时会导致第一次初始化过慢的原因
- Android EventLine框架制作过程 四 Service与Activity、Fragment通讯