ActivityManagerService之startActivity · 一 相关类的基本介绍

这篇文章主要讲的跟ActivityManagerService相关的类的简单说明(都是本人的理解,可能存在错误),大概弄清这里类代表的是什么作用是什么,对于我们梳理startActivity的流程会更加容易清晰。

目录

1、ActivityThread和ApplicationThread(内部类)、H(内部类)

2、Instrumentation

3、ActivityManagerService

4、ActivityStarter

5、ActivityStartController

6、ClientLifecycleManager

7、抽象类ClientTransactionItem

8、ActivityStack、 TaskRecord、 ActivityRecord

9、ActivityDisplay

10、KeyguardController

11、RecentTasks

12、ProcessRecord

13、ResolveInfo

备注:在AMS源码的中的方法命名习惯


1、ActivityThread和ApplicationThread(内部类)、H(内部类)

ActivityThread管理主线程中的执行申请流程,安排和执行activity,作为活动进行广播和其他操作经理要求

ApplicationThread是ActivityThread,主要用于和AMS的跨进程通信。可以这样大致理解,通过调用ActivityManager.getService()的方法,我们可以向AMS申请开始一个新的Activity,AMS通过我们传过ApplicationThread.asBinder()把处理完的结果返回到我们的主线程,完成整个跨进程通信的过程。

H继承于Handler  用于管理ActivityThread的核心功能

2、Instrumentation

谷歌的说明就是,实现应用程序检测代码的基类。(自动化测试会自动这个类,这部分我也没怎么去了解)

但是这个类和Activity的关系比较密切,Activity生命周期相关方法的调用都通过这个类去执行,我们可以通过类去追踪。

3、ActivityManagerService

这个就是我们的主角,AMS进程,主要负责创建Activity以及管理其生命周期。

AMS进程的入口和ActivityThread进程不太一样,入口不是从main方法开始

    // ActivityManagerService.java
    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 onBootPhase(int phase) {
            mService.mBootPhase = phase;
            if (phase == PHASE_SYSTEM_SERVICES_READY) {
                mService.mBatteryStatsService.systemServicesReady();
                mService.mServices.systemServicesReady();
            }
        }

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

        public ActivityManagerService getService() {
            return mService;
        }
    }

在构建SystemServer进程时,在main()方法中创建

4、ActivityStarter

这个类主要用于启动一个activity,该activity相应的启动flag解析和任务栈管理都在这个类中处理

5、ActivityStartController

负责管理ActivityStater,启动activity的工作主要还是由ActivityStater负责。

6、ClientLifecycleManager

这个类连接着AMS进程和app进程(ActivityThread),AMS通过这个类,将相应的Activity事务和生命周期的状态回调到相应的ActivityThread去处理。例如,Activity之间的切换,当前Activity转换到onPause状态,新开的Activity开始创建,调用onCreate方法,以及该Activity变为可见,转换到onResume状态。都是由AMS进行管理,通过ClientLifecycleManager分发到对应的ActivityThread,再到具体Activity去执行对应的生命周期的方法。

7、抽象类ClientTransactionItem

代表这一个Activity事务,通过它的子类就大概可以猜得出,AMS和Activity相关生命周期的关系了

8、ActivityStack、 TaskRecord、 ActivityRecord

它们的大概关系是一个ActivityStack有一个TaskRecord集合,每一个TaskRecord有一个ActivityRecord集合。

它们分别是:

ActivityRecord代表一个Activity

TaskRecord代表一个Activity任务栈

ActivityStack管理着多个Activity任务栈(注意不是每个应用分别拥有一个独立的ActivityStack,所以不能理解成一个ActivityStack代表这一个应用)

9、ActivityDisplay

代表的是一个显示器,在一个ActivityDisplay有一个ActivityStack集合,集合存放特定类型的ActivityStack,所以到这里就可以理解,为什么一个屏幕的显示是由多个Activity拼起来的。

10、KeyguardController

键盘管理器,控制键盘的遮挡,关闭和过渡

11、RecentTasks

代表最近任务列表

12、ProcessRecord

一个ProcessRecord对应着一个进程信息

13、ResolveInfo

对应着该Activity在AndroidManifest配置的信息

 

备注:在AMS源码的中的方法命名习惯

1、xxxxLocked()代表着该方法是在同步代码块内执行,保证了同步性

2、xxxxUnchecked()代表该方法内不检查相关状态,在调用该方法之前会存在检查相关状态的代码

3、isxxxx()、canxxxx()、checkxxxx()代表着该方法用于判断某种状态

4、xxxxIfNeeded()代表着该方法执行是在if判断里面的 

(发现看一圈源码,还学到一点大神们怎么对方法名的管理)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值