AMS的启动 (Android 10)

简介: AMS的启动 (Android 10)

ActivityManagerService  

AMS是系统的引导服务,应用进程的启动、切换和调度、四大组件的启动和管理都需要AMS的支持.

AMS由System Server启动,frameworks\base\services\java\com\android\server\SystemServer.java

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

run方法调用 startBootstrapServices(t);

startBootstrapServices(t);

startBootstrapServices的关键代码为

Installer installer = mSystemServiceManager.startService(Installer.class);
 
// Activity manager runs the show.
        t.traceBegin("StartActivityManager");
        // TODO: Might need to move after migration to WM.
        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();

frameworks\base\services\core\java\com\android\server\am\ActivityManagerService.java

public static final class Lifecycle extends SystemService {
        private final ActivityManagerService mService;
        private static ActivityTaskManagerService sAtm;
 
        public Lifecycle(Context context) {
            super(context);
            mService = new ActivityManagerService(context, sAtm);
        }
 
        public static ActivityManagerService startService(
                SystemServiceManager ssm, ActivityTaskManagerService atm) {
            sAtm = atm;
            return ssm.startService(ActivityManagerService.Lifecycle.class).getService();
        }
 
        @Override
        public void onStart() {
            mService.start();
        }
 
        @Override
        public void onBootPhase(int phase) {
            mService.mBootPhase = phase;
            if (phase == PHASE_SYSTEM_SERVICES_READY) {
                mService.mBatteryStatsService.systemServicesReady();
                mService.mServices.systemServicesReady();
            } else if (phase == PHASE_ACTIVITY_MANAGER_READY) {
                mService.startBroadcastObservers();
            } else if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
                mService.mPackageWatchdog.onPackagesReady();
            }
        }
 
        @Override
        public void onCleanupUser(int userId) {
            mService.mBatteryStatsService.onCleanupUser(userId);
        }
 
        public ActivityManagerService getService() {
            return mService;
        }
    }

ssm.startService

frameworks\base\services\core\java\com\android\server\SystemServiceManager.java

public void startService(@NonNull final SystemService service) {
        // Register it.
        mServices.add(service);
        // Start it.
        long time = SystemClock.elapsedRealtime();
        try {
            service.onStart();
        } catch (RuntimeException ex) {
            throw new RuntimeException("Failed to start service " + service.getClass().getName()
                    + ": onStart threw an exception", ex);
        }
        warnIfTooLong(SystemClock.elapsedRealtime() - time, service, "onStart");
    }

调用frameworks\base\services\core\java\com\android\server\SystemService.java的onStart方法

SystemService是抽象类,ActivityManagerService.Lifecycle继承了它 onStart方法

@Override
        public void onStart() {
            mService.start();
        }
private void start() {
        removeAllProcessGroups();
        mProcessCpuThread.start();
 
        mBatteryStatsService.publish();
        mAppOpsService.publish();
        Slog.d("AppOps", "AppOpsService published");
        LocalServices.addService(ActivityManagerInternal.class, mInternal);
        mActivityTaskManager.onActivityManagerInternalAdded();
        mPendingIntentController.onActivityManagerInternalAdded();
        // Wait for the synchronized block started in mProcessCpuThread,
        // so that any other access to mProcessCpuTracker from main thread
        // will be blocked during mProcessCpuTracker initialization.
        try {
            mProcessCpuInitLatch.await();
        } catch (InterruptedException e) {
            Slog.wtf(TAG, "Interrupted wait during start", e);
            Thread.currentThread().interrupt();
            throw new IllegalStateException("Interrupted wait during start");
        }
    }

启动完成


目录
相关文章
|
人工智能 前端开发 Devops
.NET技术在现代开发中的作用:.NET技术的核心价值、在现代应用开发中的实际应用、以及面临的挑战与未来趋势。
.NET技术是软件开发领域的核心力量,本文从其核心价值、实际应用及未来挑战三方面进行探讨。它支持多种语言,提供强大的开发工具和丰富的类库,并具备跨平台能力。在现代应用开发中,.NET广泛应用于企业级系统、Web应用、移动应用、云服务和游戏开发等领域。面对性能优化、容器化、AI集成等挑战,.NET持续创新以适应不断发展变化的技术环境。
421 4
|
JavaScript 前端开发 开发工具
基于 Vue3.0 和 Ant Design Vue ,高颜值管理后台UI框架vue-vben-admin运行
基于 Vue3.0 和 Ant Design Vue ,高颜值管理后台UI框架vue-vben-admin运行
1216 1
|
存储 负载均衡 安全
分布式文件系统实战,使用MinIO构建分布式文件系统!
随着文件数据的越来越多,传统的文件存储方式通过tomcat或nginx虚拟化的静态资源文件在单一的服务器节点内已经无法满足系统需求,也不利于文件的管理和维护,这就需要一个系统来管理多台计算机节点上的文件数据,这就是分布式文件系统。
6870 0
分布式文件系统实战,使用MinIO构建分布式文件系统!
|
运维 安全 Linux
阿里云操作系统迁移最佳实践
本次分享的主题是社区操作系统迁移和阿里云操作系统迁移。由龙溪社区王喆分享。 1. 操作系统生命周期 2. 操作系统迁移方案 3. 操作系统迁移流程 4. 操作系统迁移评估 5. 一站式迁移运维平台SysOM 6. SMC操作系统迁移实践
437 2
|
消息中间件 数据库
深入理解后端开发中的并发控制
在后端开发中,处理并发是一个重要而又复杂的问题。本文将深入探讨后端开发中的并发控制,包括并发的概念、常见的并发控制技术以及如何在实际项目中应用这些技术来确保系统的稳定性和性能。
Echarts——如何默认选中图表并显示tooltip
Echarts——如何默认选中图表并显示tooltip
840 1
|
Java 微服务
SpringBoot整合SMS短信服务
本文介绍了如何在SpringBoot项目中整合阿里云SMS短信服务,包括添加依赖、配置文件、配置类、服务层接口和实现类,以及控制器层的实现,用于发送短信验证码。
SpringBoot整合SMS短信服务
python项目 以docker形式打包部署全流程
在很久很久以前,我已经听过Docker的大名,当时服务着急上线虽然考虑过用Docker来部署我的服务,但是因为赶期的原因放弃了。 这两天因为华为云服务器到期,而且阿里云服务器优惠力度特别大的原因,我要把华为云服务器里的工程迁移到阿里云。 迁移的过程中,大量的时间精力浪费在了重装python,加载依赖,迁移项目,配置端口等环境配置的工作上。 我在想,如果当时用了Docker部署,我至于受这气?
|
数据建模 Java 开发工具
Android bugreport的使用
Android bugreport的使用
1007 0
|
开发工具 Android开发
Android studio历史版本下载
Android studio历史版本下载
8309 0