Framework之AMS的启动流程

一、Instrumentation类 :  该类是一个工具类,ActivityThread接收到AMS的指令创建和调度交互都由它来执行

  ActivityThread的构造方法很简单就是创建了一个ResourcesManager对象,用于管理应用程序中的资源文件

  Application环境与framework-res.apk构成了Android程序的运行环境,通过Context应用程序的大管家,可以调用进程所用到的资源和方法。

  StackSupervisor类是Activity启动和调度的核心类

二、AMS服务的启动过程

  1.SystemServer.javamain()

   public static void main(String[] args) {

    new SystemServer().run(); }

  2. SystemServer.javarun()

    private void run() {

      ...

      System.loadLibrary("android_servers");//1

      ...

      mSystemServiceManager = new SystemServiceManager(mSystemContext);//2

      LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);

       ...

      try {

        Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartServices");

         startBootstrapServices();//3   ---------------->引导服务

         startCoreServices();//4        ---------------->核心服务

         startOtherServices();//5       ---------------->其他服务

    } 

  3.SystemServer.javastartBootstrapServices()

   private void startBootstrapServices() {

    // Activity manager runs the show.

    mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService();

    我们知道SystemServiceManager的startService方法最终会返回Lifecycle类型的对象,紧接着又调用了Lifecycle的getService方法,这个方法会返回AMS类型的mService对象

    mActivityManagerService.setSystemProcess();

     ……

    mActivityManagerService.installSystemProviders();

    ……

    mActivityManagerService.systemReady(new Runnable() {

    @Override public void run() {

    Slog.i(TAG, "Making services ready");

     mSystemServiceManager.startBootPhase( SystemService.PHASE_ACTIVITY_MANAGER_READY);

    try { mActivityManagerService.startObservingNativeCrashes();

  4.Lifecycle类的介绍

    public static final class Lifecycle extends SystemService {
    private final ActivityManagerService mService;

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

    @Override
    public void onStart() {
    mService.start();
    }

    @Override
    public void onCleanupUser(int userId) {
    mService.mBatteryStatsService.onCleanupUser(userId);
    }  

    public ActivityManagerService getService() {
      return mService;
    }
  }

  5.AMS的构造方法

   public ActivityManagerService(Context systemContext) {

     //获得系统的ActivityThread

     mSystemThread = ActivityThread.currentActivityThread();  

     //创建一个HandlerThread用来处理AMS接收的命令

    mHandlerThread = new ServiceThread(TAG, android.os.Process.THREAD_PRIORITY_FOREGROUND, false /*allowIo*/);

    mHandlerThread.start();

    mHandler = new MainHandler(mHandlerThread.getLooper());

    mUiHandler = new UiHandler();

    //初始化广播的队列

    mFgBroadcastQueue = new BroadcastQueue(this, mHandler, "foreground", BROADCAST_FG_TIMEOUT, false);

    mBgBroadcastQueue = new BroadcastQueue(this, mHandler, "background", BROADCAST_BG_TIMEOUT, true);

    mBroadcastQueues[0] = mFgBroadcastQueue;

    mBroadcastQueues[1] = mBgBroadcastQueue;

    //初始化Service相关的容器

    mServices = new ActiveServices(this);

    //初始化Provider相关的Map,里面保存了注册的ContentProvider

    mProviderMap = new ProviderMap(this);

    //初始化并创建data/system/目录

    File dataDir = Environment.getDataDirectory();

    File systemDir = new File(dataDir, "system");

    systemDir.mkdirs();

    ....

   //初始化StackSupervisor,该类是Activity启动和调度的核心类

    mStackSupervisor = new ActivityStackSupervisor(this, mRecentTasks);

    mTaskPersister = new TaskPersister(systemDir, mStackSupervisor, mRecentTasks);

    

猜你喜欢

转载自www.cnblogs.com/liunx1109/p/11124753.html