Android13 ActivityTaskManagerService启动流程分析

ActivityTaskManagerService由SystemServiceManager启动,启动流程如下:

下面从SystemServer的startBootstrapServices开始分析:

//frameworks/base/core/java/com/android/server/SystemServer.java
public final class SystemServer implements Dumpable {
    /** All system services */
    SystemServiceManager mSystemServiceManager;
    private void startBootstrapServices(@NonNull TimingsTraceAndSlog t) {
        // 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();
    }
}

上面方法的主要处理如下:

1、调用SystemServiceManager的startService方法,返回ActivityTaskManagerService.Lifecycle的对象。

2、调用mSystemServiceManager.startService返回对象(ActivityTaskManagerService.Lifecycle)的getService方法。

下面分别进行分析:

SystemServiceManager startService

调用SystemServiceManager的startService方法:

//frameworks/base/core/java/com/android/server/SystemServer.java
public final class SystemServer implements Dumpable {
    public SystemService startService(String className) {
        final Class<SystemService> serviceClass = loadClassFromLoader(className,
                this.getClass().getClassLoader());
        return startService(serviceClass);
    }
}

调用SystemServiceManager的startService方法:

//frameworks/base/core/java/com/android/server/SystemServiceManager.java
public final class SystemServiceManager implements Dumpable {
    public <T extends SystemService> T startService(Class<T> serviceClass) {
        try {
            final String name = serviceClass.getName();
            Slog.i(TAG, "Starting " + name);
            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartService " + name);


            // Create the service.
            if (!SystemService.class.isAssignableFrom(serviceClass)) {
                throw new RuntimeException("Failed to create " + name
                        + ": service must extend " + SystemService.class.getName());
            }
            final T service;
            try {
                Constructor<T> constructor = serviceClass.getConstructor(Context.class);
                service = constructor.newInstance(mContext); //创建ActivityTaskManagerService.Lifecycle对象
            } catch (InstantiationException ex) {
                throw new RuntimeException("Failed to create service " + name
                        + ": service could not be instantiated", ex);
            } catch (IllegalAccessException ex) {
                throw new RuntimeException("Failed to create service " + name
                        + ": service must have a public constructor with a Context argument", ex);
            } catch (NoSuchMethodException ex) {
                throw new RuntimeException("Failed to create service " + name
                        + ": service must have a public constructor with a Context argument", ex);
            } catch (InvocationTargetException ex) {
                throw new RuntimeException("Failed to create service " + name
                        + ": service constructor threw an exception", ex);
            }


            startService(service);
            return service;
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
        }
    }
}

上面方法主要处理如下:

1、创建ActivityTaskManagerService.Lifecycle对象。

2、调用SystemServiceManager的startService方法。

下面分别进行分析:

ActivityTaskManagerService Lifecycle

创建ActivityTaskManagerService.Lifecycle对象,ActivityTaskManagerService.Lifecycle的构造方法如下:

//frameworks/base/core/java/com/android/server/SystemServiceManager.java
public final class SystemServiceManager implements Dumpable {
    //静态内部类,继承SystemService,说明它是一个系统service
    public static final class Lifecycle extends SystemService {
        private final ActivityTaskManagerService mService;


        public Lifecycle(Context context) {
            super(context);
            mService = new ActivityTaskManagerService(context);
        }
    }
}

new ActivityTaskManagerService

创建ActivityTaskManagerService对象:

//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    public ActivityTaskManagerService(Context context) {
        mContext = context;
        mFactoryTest = FactoryTest.getMode();
        mSystemThread = ActivityThread.currentActivityThread();
        mUiContext = mSystemThread.getSystemUiContext();
        mLifecycleManager = new ClientLifecycleManager();
        mVisibleActivityProcessTracker = new VisibleActivityProcessTracker(this);
        mInternal = new LocalService();
        GL_ES_VERSION = SystemProperties.getInt("ro.opengles.version", GL_ES_VERSION_UNDEFINED);
        mWindowOrganizerController = new WindowOrganizerController(this);
        mTaskOrganizerController = mWindowOrganizerController.mTaskOrganizerController;
        mTaskFragmentOrganizerController =
                mWindowOrganizerController.mTaskFragmentOrganizerController;
        mBackNavigationController = BackNavigationController.isEnabled()
                ? new BackNavigationController() : null;
    }
}

SystemServiceManager startService

调用SystemServiceManager的startService方法:

//frameworks/base/core/java/com/android/server/SystemServiceManager.java
public final class SystemServiceManager implements Dumpable {
    private List<SystemService> mServices;
    public void startService(@NonNull final SystemService service) {
        // Check if already started
        String className = service.getClass().getName();
        if (mServiceClassnames.contains(className)) {
            Slog.i(TAG, "Not starting an already started service " + className);
            return;
        }
        mServiceClassnames.add(className);


        // Register it.
        mServices.add(service); //将传入的SystemService对象加入到ArrayList中


        // Start it.
        long time = SystemClock.elapsedRealtime();
        try {
            service.onStart(); //调用SystemService的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");
    }
}

ActivityTaskManagerService Lifecycle onStart

调用SystemService的onStart方法,根据传入的参数,该SystemService对象为ActivityTaskManagerService.Lifecycle对象,因此调用ActivityTaskManagerService.Lifecycle的onStart方法:

//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    public static final class Lifecycle extends SystemService {
        private final ActivityTaskManagerService mService;
        public void onStart() {
            publishBinderService(Context.ACTIVITY_TASK_SERVICE, mService);
            mService.start();
        }
    }
}

调用ActivityTaskManagerService的start方法:

//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    private void start() {
        LocalServices.addService(ActivityTaskManagerInternal.class, mInternal);
    }
}

ActivityTaskManagerService Lifecycle getService

调用mSystemServiceManager.startService返回对象(ActivityTaskManagerService.Lifecycle)的getService方法:

//frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    //静态内部类,继承SystemService,说明它是一个系统service
    public static final class Lifecycle extends SystemService {
        private final ActivityTaskManagerService mService;
        public ActivityTaskManagerService getService() {
            return mService;
        }
    }
}
  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值