ActivityManagerService的启动流程

AMS是什么

  1. 从java角度来看,AMS就是一个java对象,实现了Ibinder接口,所以它是一个用于进程之间通信的接口
  2. AMS是一个服务。ActivityManagerService从名字就可以看出,它是一个服务,用来管理Activity,而且是一个系统服务,就是包管理服务,电池管理服务,震动管理服务等。
  3. AMS是一个Binder。AMS实现了Ibinder接口,所以它是一个Binder,这意味着他不但可以用于进程间通信,还是一个线程,因为一个Binder就是一个线程。

如果我们启动一个hello World安卓用于程序,里面不另外启动其他线程,这个里面最少要启动4个线程
1 main线程,只是程序的主线程,也是日常用到的最多的线程,也叫UI线程,因为android的组件是非线程安全的,所以只允许UI/MAIN线程来操作。
2 GC线程,java有垃圾回收机制,每个java程序都有一个专门负责垃圾回收的线程。
3 Binder1 就是我们的ApplicationThread,这个类实现了Ibinder接口,用于进程之间通信,具体来说,就是我们程序和AMS通信的工具
4 Binder2 就是我们的ViewRoot.W对象,他也是实现了IBinder接口,就是用于我们的应用程序和wms通信的工具

ActivityManagerService的启动流程(API 30)

ActivityManagerService是在SystemServer初始化的时候启动的,所以我们先看SystemServer的初始化 :SystemServer的main方法。

 public static void main(String[] args) {
   
        new SystemServer().run();
    }

接着点进去run方法

 private void run() {
   
            ...
            //创建系统上下文
            //1,创建系统资源(系统字体,图片等),因为APP也会用到系统的资源
            //2,创建主题(APP用到的theme)
            createSystemContext();
            ...
           //创建SystemServiceManager
            mSystemServiceManager = new SystemServiceManager(mSystemContext);
            ...
        try {
   
            t.traceBegin("StartServices");
            //开启引导服务(比如AMS)
            startBootstrapServices(t);
            //开启核心服务
            startCoreServices(t);
            //开启其他服务
            startOtherServices(t);
        } catch (Throwable ex) {
   
            Slog.e("System", "******************************************");
            Slog.e("System", "************ Failure starting system services", ex);
            throw ex;
        } finally {
   
            t.traceEnd(); // StartServices
   
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值