Android Framework学习(二)之SystemServer

SystemServer 概述

SystemServer 是 Android 系统中一个非常重要的进程,它负责 启动管理各种系统服务

主要经过以下几个阶段:

  1. Zygote 启动:由 Zygote进程 fork 出 SystemServer进程
  2. 初始化:执行 SystemServer.main()方法
  3. 服务启动:按顺序启动各种系统服务
  4. 系统就绪:等待所有服务启动完成后,系统进入就绪状态

启动从Main方法开始

/**
* The main entry point from zygote.
*/
public static void main(String[] args) {
    new SystemServer().run();
}

很简单,创建new一个自己的对象,并执行run方法,看一下run方法

private void run() {
    ...
    if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
        Slog.w(TAG, "System clock is before 1970; setting to 1970.");
        SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
    }

    VMRuntime.getRuntime().clearGrowthLimit();
    // The system server has to run all of the time, so it needs to be
    // as efficient as possible with its memory usage.
    VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);

    android.os.Process.setThreadPriority(
                android.os.Process.THREAD_PRIORITY_FOREGROUND);
    android.os.Process.setCanSelfBackground(false);
    Looper.prepareMainLooper();

   // Create the system service manager.
    mSystemServiceManager = new SystemServiceManager(mSystemContext);
    mSystemServiceManager.setStartInfo(mRuntimeRestart,
            mRuntimeStartElapsedTime, mRuntimeStartUptime);
    LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);

   try {
        traceBeginAndSlog("StartServices");
        startBootstrapServices();
        startCoreServices();
        startOtherServices();
        SystemServerInitThreadPool.shutdown();
    } catch (Throwable ex) {
           Slog.e("System", "******************************************");
            Slog.e("System", "************ Failure starting system services", ex);
            throw ex;
    } finally {
        traceEnd();
    }

    Looper.loop();
    throw new RuntimeException("Main thread loop unexpectedly exited");
}

run方法里面主要进行设置手机时间,设置虚拟机内存大小,创建消息循环Looper,创建SystemServiceManage等。最主要的就是启动了各类服务,例如:

  • startBootstrapServices() //启动引导服务
  • startCoreServices() //启动核心服务
  • startOtherServices() //启动其他服务

startBootstrapServices 启动引导服务

//com.android.server.SystemServer

private void startBootstrapServices() {
    Installer installer = mSystemServiceManager.startService(Installer.class);
    mSystemServiceManager.startService(DeviceIdentifiersPolicyService.class);

    //ActivityManagerService  -  AMS
    ActivityTaskManagerService atm = mSystemServiceManager.startService(ActivityTaskManagerService.Lifecycle.class).getService();
    mActivityManagerService = ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);
    mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
    mActivityManagerService.setInstaller(installer);
    mWindowManagerGlobalLock = atm.getGlobalLock();
    t.traceEnd();
    
    ....
    
    //PackageManagerService  -  PMS
    Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain");
    mPackageManagerService = PackageManagerService.main(mSystemContext, installer,domainVerificationService, mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF,mOnlyCore);
    
    ....
    
    //WindowManagerService  -  WMS
    mSystemServiceManager.startBootPhase(t, SystemService.PHASE_WAIT_FOR_SENSOR_SERVICE);
    wm = WindowManagerService.main(context, inputManager, !mFirstBoot, mOnlyCore,new PhoneWindowManager(), mActivityManagerService.mActivityTaskManager);
    ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);
    ServiceManager.addService(Context.INPUT_SERVICE, inputManager,* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);
    t.traceEnd();
    
    ....
    
    //PowerManagerService  -  PWMS
    mPowerManagerService = mSystemServiceManager.startService(PowerManagerService.class);
    t.traceEnd();
    
    ....
    
    //NetworkManagementService  - NMS
    try {
        networkManagement = NetworkManagementService.create(context);
        ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement);
    } catch (Throwable e) {
        reportWtf("starting NetworkManagement Service", e);
    }
    t.traceEnd();
    
    ....
    
}
  • ActivityManagerService (AMS服务)

    • 应用程序生命周期管理
    • Activity 启动和调度
    • 进程管理
  • PackageManagerService (PMS)
    • 应用包管理
    • 权限管理
    • 组件解析
  • WindowManagerService (WMS)
    • 窗口管理
    • UI 布局管理
    • 输入事件分发
  • PowerManagerService (PWMS)
    • 电源管理
    • 唤醒锁管理
    • 休眠唤醒控制
  • NetworkManagementService (NMS)
    • 网络管理
    • 流量控制
    • 网络策略

startCoreServices 启动核心服务

private void startCoreServices() {
    ...
     mSystemServiceManager.startService(BatteryService.class);
     ...
}
  • BatteryService:电池管理服务
    • 监控电池状态和电量
    • 管理电池相关事件
    • 提供电池信息给其他组件

startOtherServices 启动其他服务

 private void startOtherServices() {
        final Context context = mSystemContext;
        VibratorService vibrator = null;
        DynamicAndroidService dynamicAndroid = null;
        IStorageManager storageManager = null;
        NetworkManagementService networkManagement = null;
        IpSecService ipSecService = null;
        NetworkStatsService networkStats = null;
        NetworkPolicyManagerService networkPolicy = null;
        ConnectivityService connectivity = null;
        NsdService serviceDiscovery= null;
        WindowManagerService wm = null;
        SerialService serial = null;
        NetworkTimeUpdateService networkTimeUpdater = null;
        InputManagerService inputManager = null;
        TelephonyRegistry telephonyRegistry = null;
        ConsumerIrService consumerIr = null;
        MmsServiceBroker mmsService = null;
        HardwarePropertiesManagerService hardwarePropertiesService = null;
        ....
}
  • VibratorService:震动服务
  • DynamicAndroidService:动态Android服务
  • NetworkManagementService:网络管理服务
  • NetworkStatsService:网络统计服务
  • ConnectivityService:连接性服务
  • WindowManagerService:窗口管理服务
  • InputManagerService:输入管理服务
  • TelephonyRegistry:电话注册服务
  • HardwarePropertiesManagerService:硬件属性管理服务
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容