Android R WiFiService启动流程

  • Post author:
  • Post category:其他



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