android系统启动流程之SystemServer运行过程

SystemServer进程的启动流程:直接看代码:
SystemServer是Java中的一个进程,执行入口是SystemServer.java.main();

SystemServer.java.main();
  -->new SystemServer().run();
      -->createSystemContext();//创建系统上下文:虽然SystemServer没有界面,他也有这些操作
          -->ActivityThread acivityThread = ActivityThread.systemMain();
                -->ActivityThread thread = new ActivityThread();
                   thread.attach(true, 0);
                      -->mInstrumentation = new Instrumentation();
                         ContextImpl context = ContextImpl.createAppContext();
                         //makeApplication会加载各种资源:  apk(用assetManager加载Res,在下面这个地方做)
                         mInitialApplication = context.mPackageInfo.makeApplication(true, null);
                          -->context.setResources(packageInfo.getResources());
                         mInitialApplication.onCreate();
                   return thread;
             mSystemContext = activityThread.getSystemContext();
             mSystemContext.setTheme(DEFAULT_SYSTEM_THEME);
             //ui的系统上下文也创建 好了
             context  systemUiContext = activityThread.getSystemUiContext();
      //构建system manager service: 利用它去管理各种System Service, 后面才能去启动各种Services.
      -->mSystemServiceManager = new SystemServiceManager(mSystemContext);    
          
      -->run函数是重点,非常重要的点在于三个函数,以下三个函数的启动包含了90多个服务:
         startBootstrapServices(t);
         startCoreServices(t);
         startOtherServices(t);

         //死循环,有loop意味着它有handler
         Looper.loop();

上面代码注释中说道,SystemServiceManager这个对象是SystemServer进程中重要的数据结构,用于管理系统各种SystemService,
那么它具体是怎么做到的?在具体分析之前,先理清楚 以下几个概念:

  •  什么是SystemService:

系统各类服务需要封装的类,每一种系统服务都要直接或间接的继续这个SystemService类,成为一个SystemService的类对象,方便让SystemServiceManager统一管理。

  •  什么是SystemServiceManager:

是SystemServer中的一个非常重要的类,得力助手,SystemServer通过它管理各种Services,如AMS, WMS, PKMS等,并且这些服务必须封装成一个对象,这个类就是SystemService,也就是说SysermServiceManager管理的都是SystemService的类对象。这种模式有点类似Activity:通过FragmentManager去管理许多的Fragment类对象。

  •  什么是SystemServer:

它是进程,是系统服务端,管理 各种Services.

  •  什么是ServiceManager:

它也是一个进程,早上Zygote进程启动,它是由init进程通过解析init.rc后创建。

上面的这几个问题可以用下图来概括:

android系统启动流程之SystemServer运行过程_第1张图片

搞懂了以上的知识点之后,以ATMS为例分析,SystemSericeManager是如何管理这个ATMS的,ATMS是在以下接口中被启动的。

startBootstrapServices(t);
  //启动ATMS
  -->ActivityTaskManagerService atm = mSystemServiceManager.startService(ActivityTaskManagerService.LifeCycle.class).getService());
        -->ActivityTaskManagerService(Class serviceClass): //拿到类可以通过类去反射,得到Methods.
              -->final T service;
                 service = construct.newIntance(mContext); //创建一个实例:即LifeCycle类的实例,在其构造函数中会实例化一个ATMS
                 startService(service); //启动服务
                    -->class serviceClass =  loadClassFromLoader(classname, this.getClass().getClassLoader());
                       return startService(serviceClass);
                          -->mServices.add(service); //mServices就是ArrayList数组,将ATMS这个SystemService对象添加到数组中。
                             service.onStart(); //本质就是调用了LifeCycle内部的ATMS服务实例的start()接口,下面有分析。

可以看看ActivityTaskManagerService它的父类是什么:
 class ActivityTaskManagerService extends IActivityTaskManager.Stub{}; 

疑问一,根据前面的分析,说系统各种服务都是继承SystemService类,为什以它这里不是继承至SystemService类呢?因为JAVA只能有一个父类,ATMS是一个服务,根据Binder的使用,各种ATMS需要继承一个Binder类(Stub类),但是为了让ATMS能满足上面的规则(需要继承至SystemService类),此时ActivityTaskManagerService内部定义了一个静态static的内部类LifeCycle,它继承至SystemService. 然后让ActivityTaskManagerService类对象成为LifeCycle的类成员, 这就解决是java语言中,如何让一个类可以继承两个父类的问题,后面对服务ATMS的操作转为LifeCycle中的操作。如下图代码所示:

    class ActivityTaskManagerService extends IActivityTaskManager.Stub{
        public static final class LifeCycle extends SystemService{
            private final ActivityTaskManagerService mService;
            public LifeCycle(){ //实 例化。
                mService = new ActivityTaskManagerService();
            }

            public void onStart(){ //对LifeCycle的所有操作都是对mService(即ATMS的操作)
               mService.start();
            }
        }
    }

以上是以ATMS为例进行分析说明,系统的90+种系统服务均是走类似的业务逻辑流程,可以按相同的方法进行分析,以下图这张图做最后一个总结。至此,安卓系统的整体分析流程结束。

android系统启动流程之SystemServer运行过程_第2张图片

你可能感兴趣的:(Android系统,android,SystemServer,SystemService)