本文基于Android R
WiFiService
简单来讲就是com.android.server.wifi.WifiService类,继承自SystemService,这个类主要负责初始化WifiServiceImpl,将WifiServiceImpl以WIFI_SERVICE注册到ServiceManager中,Wifi的主要功能通过binder来调用WifiServiceImpl实现。
/**
* Service implementing Wi-Fi functionality. Delegates actual interface
* implementation to WifiServiceImpl.
*/
public final class WifiService extends SystemService {
private static final String TAG = "WifiService";
// Notification channels used by the wifi service.
public static final String NOTIFICATION_NETWORK_STATUS = "NETWORK_STATUS";
public static final String NOTIFICATION_NETWORK_ALERTS = "NETWORK_ALERTS";
public static final String NOTIFICATION_NETWORK_AVAILABLE = "NETWORK_AVAILABLE";
private final WifiServiceImpl mImpl;
private final WifiContext mWifiContext;
public WifiService(Context contextBase) {
super(contextBase);
mWifiContext = new WifiContext(contextBase);
WifiInjector injector = new WifiInjector(mWifiContext);
WifiAsyncChannel channel = new WifiAsyncChannel(TAG);
mImpl = new WifiServiceImpl(mWifiContext, injector, channel);
}
@Override
public void onStart() {
Log.i(TAG, "Registering " + Context.WIFI_SERVICE);
publishBinderService(Context.WIFI_SERVICE, mImpl);
}
}
首先分析WiFiService如何启动
system_server进程中会启动Wifiservice服务,启动该服务在SystemServer.java文件,主要查看注释// Wifi Service must be started first for wifi-related services.。
private static final String WIFI_SERVICE_CLASS ="com.android.server.wifi.WifiService"; private void startOtherServices(@NonNull TimingsTraceAndSlog t){ if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_WIFI)) { // Wifi Service must be started first for wifi-related services. mSystemServiceManager.startService(WIFI_SERVICE_CLASS); mSystemServiceManager.startService( "com.android.server.wifi.scanner.WifiScanningService"); } }
SystemServer继续调用SystemServiceManager#startService
/**
* Starts a service by class name.
*
* @return The service instance.
*/
public SystemService startService(String className) {
final Class<SystemService> serviceClass = loadClassFromLoader(className,
this.getClass().getClassLoader());
return startService(serviceClass);
}
文件路径
/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiService.java
/frameworks/base/services/java/com/android/server/SystemServer.java
版权声明:本文为qq_26543087原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。