ActivityManagerService启动-android12
ActivityManagerService启动-android12
android12-release
AMS启动
SystemServer.run()
->startBootstrapServices
->ActivityTaskManagerService
->ActivityManagerService
- 启动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需要立即覆盖
时序图
ATMS\AMS初始化
ATMS初始化
FactoryTest.getMode()
默认是FACTORY_TEST_OFF = 0
GL_ES_VERSION
: opengles版本WindowOrganizerController
: 用于组织窗口的界面的服务器端实现。TaskOrganizerController
: 存储与给定窗口模式关联的TaskOrganizer及其关联状态。Context.ACTIVITY_TASK_SERVICE
服务添加到ServiceManager
mService.start()
在LocalServices中添加ActivityTaskManagerInternal:LocalServices.addService(ActivityTaskManagerInternal.class, mInternal);
AMS初始化
- 创建"ActivityManager"的前台线程
mHandlerThread
,并获取mHandler
;创建"android.ui"的线程mUiHandler
mFgBroadcastQueue
前台广播接收器,在运行超过10s将放弃执行;mBgBroadcastQueue
后台广播接收器,在运行超过60s将放弃执行;mOffloadBroadcastQueue
offload广播接收器,在运行超过60s将放弃执行;
- 创建
ActiveServices
,其中非低内存手机mMaxStartingBackground默认为8
mAppErrors
报错弹框提示,如Crash、ANR
systemDir = SystemServiceManager.ensureSystemDir();
创建目录/data/systemmBatteryStatsService
服务,mProcessStats
进程统计服务
- 关联ATMS,并初始ATMS
- 创建
"CpuTracker"
的线程,并更新CPU状态updateCpuStatsNow()
start()
处理
AMS.systemReady
SystemServer.run()
->startOtherServices
-> mActivityManagerService.systemReady
mActivityManagerService.installSystemProviders();
安装系统Provider- AMS与WMS互相关联
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
- goingCallback前: