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

启动完成


目录
相关文章
|
4天前
|
Java Android开发
Android 开机动画的启动
Android 开机动画的启动
13 0
|
缓存 Android开发 开发者
Android | Activity 启动流程分析(上)
Android | Activity 启动流程分析(上)
|
Android开发 容器
Android | Activity 启动流程分析(下)
Android | Activity 启动流程分析(下)
|
Java Android开发
android 线程只启动一次
android 线程只启动一次
119 0
android 线程只启动一次
|
Android开发 数据格式
Android 允许其他应用启动您的Activity
Android 允许其他应用启动您的Activity
224 0
Android 允许其他应用启动您的Activity
|
Android开发
Android 世界中,谁喊醒了 Zygote ?
Android 世界中,谁喊醒了 Zygote ?
Android 世界中,谁喊醒了 Zygote ?
|
Linux Android开发
【Android 启动过程】Android 应用启动流程 | Activity 启动流程
【Android 启动过程】Android 应用启动流程 | Activity 启动流程
370 0
【Android 启动过程】Android 应用启动流程 | Activity 启动流程
|
XML Android开发 数据格式