本文基于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 版权协议,转载请附上原文出处链接和本声明。
