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");
        }
    }

启动完成


目录
相关文章
|
XML Android开发 数据格式
|
Java Android开发
详解Android是如何启动的
Android系统启动过程 首先看一张Android框架结构图    Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。 启动的过程如下图所示:(图片来自网上,后面有地址)        一 Init进程的启动   init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开
1804 0
|
9月前
|
Java Android开发
Android 开机动画的启动
Android 开机动画的启动
148 0
|
Linux Android开发
|
Java Android开发 Linux
Android 启动过程详解
Android从Linux系统启动有4个步骤; (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) Home启动 总体启动框架图如:   第一步:initial进程(system\core\init)      init进程,它是一个由内核启动的用户级进程。
1115 0
|
Java Android开发
android 线程只启动一次
android 线程只启动一次
185 0
android 线程只启动一次
|
Linux Android开发
【Android 启动过程】Android 应用启动流程 | Activity 启动流程
【Android 启动过程】Android 应用启动流程 | Activity 启动流程
430 0
【Android 启动过程】Android 应用启动流程 | Activity 启动流程
|
安全 Java Linux
Android 6.0启动过程详细解析
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/58192240 在之前的一篇文章中,从概念上学习了Andoird系统的启动过程,Android系统启动过程学习 而在这篇文章中,我们将从代码角度仔细学习Android系统的启动过程,同时,学习Android启动过程中的初始化脚本语言,即init.rc中的语言语法。
923 0

热门文章

最新文章