ActivityManagerService启动-android12

  • ActivityManagerService启动-android12
  • AMS启动
  • 时序图
  • ATMS\AMS初始化
  • ATMS初始化
  • AMS初始化
  • AMS.systemReady
  • * 时序图


ActivityManagerService启动-android12

android12-release


AMS启动

SystemServer.run()->startBootstrapServices->ActivityTaskManagerService->ActivityManagerService

android p 启动器6 android12启动器下载_android

  • 启动ATMS服务mSystemServiceManager.startService(ActivityTaskManagerService.Lifecycle.class).getService()
  • ATMS服务启动时添加ACTIVITY_TASK_SERVICE = "activity_task"服务ServiceManager.addService()注册到binder
  • 启动AMS服务ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);,并与ATMS关联mActivityTaskManager = atm;
  • 设置AMS的系统服务管理器mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
  • 设置AMS的APP安装器mActivityManagerService.setInstaller(installer);
  • WM全局锁mWindowManagerGlobalLock = atm.getGlobalLock();
  • PMS启动后,初始化AMS相关的Power管理mActivityManagerService.initPowerManagement();
  • 注册AMS管理的各种服务mActivityManagerService.setSystemProcess();ServiceManager.addService()注册到binder;
    Context.ACTIVITY_SERVICE\ProcessStats.SERVICE_NAME\
    "meminfo"\"gfxinfo"\"dbinfo"\"cpuinfo"\"permission"\"processinfo"\"cacheinfo"
  • 使用ActivityManager实例完成监视程序设置,并侦听是否重新启动,只有在ActivityManagerService作为系统进程正确启动后才能执行此操作watchdog.init(mSystemContext, mActivityManagerService);
  • DisplayManager需要立即覆盖

时序图

android p 启动器6 android12启动器下载_初始化_02


ATMS\AMS初始化

ATMS初始化

android p 启动器6 android12启动器下载_AMS_03

android p 启动器6 android12启动器下载_Android_04

  1. FactoryTest.getMode()默认是FACTORY_TEST_OFF = 0
  2. GL_ES_VERSION: opengles版本
  3. WindowOrganizerController: 用于组织窗口的界面的服务器端实现。
  4. TaskOrganizerController: 存储与给定窗口模式关联的TaskOrganizer及其关联状态。
  5. Context.ACTIVITY_TASK_SERVICE服务添加到ServiceManager
  6. mService.start()在LocalServices中添加ActivityTaskManagerInternal: LocalServices.addService(ActivityTaskManagerInternal.class, mInternal);

AMS初始化

android p 启动器6 android12启动器下载_android_05

  1. 创建"ActivityManager"的前台线程 mHandlerThread,并获取mHandler;创建"android.ui"的线程 mUiHandler
  2. android p 启动器6 android12启动器下载_初始化_06


  3. mFgBroadcastQueue前台广播接收器,在运行超过10s将放弃执行;mBgBroadcastQueue后台广播接收器,在运行超过60s将放弃执行;mOffloadBroadcastQueue offload广播接收器,在运行超过60s将放弃执行;
  4. 创建ActiveServices,其中非低内存手机mMaxStartingBackground默认为8
  5. mAppErrors报错弹框提示,如Crash、ANR
  6. systemDir = SystemServiceManager.ensureSystemDir();创建目录/data/system
  7. mBatteryStatsService服务,mProcessStats 进程统计服务
  8. 关联ATMS,并初始ATMS
  9. 创建"CpuTracker"的线程,并更新CPU状态updateCpuStatsNow()
  10. start()处理

AMS.systemReady

SystemServer.run()->startOtherServices-> mActivityManagerService.systemReady

  1. mActivityManagerService.installSystemProviders(); 安装系统Provider
  2. AMS与WMS互相关联
  3. AMS.systemReady 其中按goingCallback传参分为之前、中、后;
  • goingCallback前mSystemReady 首次为flase,则不进入该分支。
    1》杀掉procsToKill中的进程;
    2》系统和进程都处于ready状态EventLogTags.writeBootProgressAmsReady(SystemClock.uptimeMillis())
  • goingCallback中:传递过来参数Runable类型。
    1》启动阶段550PHASE_ACTIVITY_MANAGER_READY
    2》启动WebView,并且会创建进程mWebViewUpdateService.prepareWebViewInSystemServer()
    3》StartSystemUI启动systemui服务;
    4》启动阶段600PHASE_THIRD_PARTY_APPS_CAN_START
    5》… … 等等
  • goingCallback后
    1》mSystemServiceManager.startUser回调所有SystemService的onStartUser();
    2》startPersistentApps
    3》mAtmInternal.startHomeOnAllDisplays(currentUserId, "systemReady")启动桌面Activity;
    4》sendUserStartBroadcast发送广播USER_STARTED、USER_STARTING;
    5》resumeTopActivities恢复栈顶Activity:mAtmInternal.resumeTopActivities(false /* scheduleIdle */);
    6》sendUserSwitchBroadcasts发送广播USER_SWITCHED;
    7》setBinderProxies

* 时序图

android p 启动器6 android12启动器下载_android p 启动器6_07